In recent days, I am very upset because I often get exceptions for some permissions, saying that I did not define the correct ones in the manifest, although I did. For example, I try to run the code:
ContentResolver contentResolver = getContentResolver(); Cursor cursor = contentResolver.query(uri, new String[]{ContactsContract.Contacts._ID}, null, null, null); if(cursor.moveToFirst()) { Long contactId = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor cursorPhones = contentResolver.query(Phone.CONTENT_URI,null,Phone.CONTACT_ID+"="+contactId,null,null); }
And the first request succeeds, and the second gives me an exception, here is the stack trace:
12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: FATAL EXCEPTION: main 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: Process: com.example.pablo.appcontacts, PID: 4597 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-472955313F/1 flg=0x1 }} to activity {com.example.pablo.appcontacts/com.example.pablo.appcontacts.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=4597, uid=10061 requires android.permission.READ_CONTACTS, or grantUriPermission() 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3699) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.-wrap16(ActivityThread.java) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=4597, uid=10061 requires android.permission.READ_CONTACTS, or grantUriPermission() 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.os.Parcel.readException(Parcel.java:1599) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.content.ContentResolver.query(ContentResolver.java:491) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.content.ContentResolver.query(ContentResolver.java:434) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.example.pablo.appcontacts.MainActivity.getPhoneNumber(MainActivity.java:93) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.example.pablo.appcontacts.MainActivity.renderContact(MainActivity.java:69) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.example.pablo.appcontacts.MainActivity.onActivityResult(MainActivity.java:57) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.Activity.dispatchActivityResult(Activity.java:6428) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3695) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.-wrap16(ActivityThread.java) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1393) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.os.Looper.loop(Looper.java:148) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5417) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 12-04 18:25:43.689 4597-4597/com.example.pablo.appcontacts E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 12-04 18:25:50.333 4597-4606/com.example.pablo.appcontacts W/CursorWrapperInner: Cursor finalized without prior close() 12-04 18:26:32.809 4597-4604/com.example.pablo.appcontacts W/art: Suspending all threads took: 14.922ms 12-04 18:28:27.460 4597-4604/com.example.pablo.appcontacts W/art: Suspending all threads took: 14.635ms
Does anyone run into similar problems? I had those who have a service and internal broadcast receiver, trying to read SMS too ...
EDIT
Here's the manifest:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.pablo.appcontacts"> <uses-permission android:name="android.permission.READ_CONTACTS"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Target SDK is API 23: Android 6.0 (Marshmallow), min. Sdk - 15: Android 4.0.3. The emulator works in API 23: Android 6.0.