diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index 83a4463..5f0a8af 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -257,23 +257,32 @@
      * Return a Cursor containing just one message from the ICC.
      */
     private Cursor getSingleMessageFromIcc(String messageIndexString) {
+        int messageIndex = -1;
         try {
-            int messageIndex = Integer.parseInt(messageIndexString);
-            SmsManager smsManager = SmsManager.getDefault();
-            ArrayList<SmsMessage> messages = smsManager.getAllMessagesFromIcc();
-
-            SmsMessage message = messages.get(messageIndex);
-            if (message == null) {
-                throw new IllegalArgumentException(
-                        "Message not retrieved. ID: " + messageIndexString);
-            }
-            MatrixCursor cursor = new MatrixCursor(ICC_COLUMNS, 1);
-            cursor.addRow(convertIccToSms(message, 0));
-            return withIccNotificationUri(cursor);
+            Integer.parseInt(messageIndexString);
         } catch (NumberFormatException exception) {
-            throw new IllegalArgumentException(
-                    "Bad SMS ICC ID: " + messageIndexString);
+            throw new IllegalArgumentException("Bad SMS ICC ID: " + messageIndexString);
         }
+        ArrayList<SmsMessage> messages;
+        final SmsManager smsManager = SmsManager.getDefault();
+        // Use phone id to avoid AppOps uid mismatch in telephony
+        long token = Binder.clearCallingIdentity();
+        try {
+            messages = smsManager.getAllMessagesFromIcc();
+        } finally {
+            Binder.restoreCallingIdentity(token);
+        }
+        if (messages == null) {
+            throw new IllegalArgumentException("ICC message not retrieved");
+        }
+        final SmsMessage message = messages.get(messageIndex);
+        if (message == null) {
+            throw new IllegalArgumentException(
+                    "Message not retrieved. ID: " + messageIndexString);
+        }
+        MatrixCursor cursor = new MatrixCursor(ICC_COLUMNS, 1);
+        cursor.addRow(convertIccToSms(message, 0));
+        return withIccNotificationUri(cursor);
     }
 
     /**
@@ -608,7 +617,8 @@
      */
     private int deleteMessageFromIcc(String messageIndexString) {
         SmsManager smsManager = SmsManager.getDefault();
-
+        // Use phone id to avoid AppOps uid mismatch in telephony
+        long token = Binder.clearCallingIdentity();
         try {
             return smsManager.deleteMessageFromIcc(
                     Integer.parseInt(messageIndexString))
@@ -618,8 +628,9 @@
                     "Bad SMS ICC ID: " + messageIndexString);
         } finally {
             ContentResolver cr = getContext().getContentResolver();
-
             cr.notifyChange(ICC_URI, null, true, UserHandle.USER_ALL);
+
+            Binder.restoreCallingIdentity(token);
         }
     }
 
