0

Я хочу читать SMS с помощью средства определения содержимого. Я добавил разрешения в файле манифеста, как это:getContentResolver(). Query (uriSMSURI, null, null, null, null), предоставляющий исключение, вызванное отказом в разрешении при наличии разрешения

<uses-permission android:name="android.permission.READ_SMS"/> 

Код:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Uri uriSMSURI = Uri.parse("content://sms/inbox"); 
    Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null); //line that gives exception 
    cur.close();} 

Но это дает ошибку:

02-22 02:55:36.429 18963-18963/inc.osi.imossis E/AndroidRuntime: FATAL EXCEPTION: main 
Process: inc.osi.imossis, PID: 18963 
java.lang.RuntimeException: Unable to start activity ComponentInfo{inc.osi.imossis/inc.osi.imossis.MainActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/inbox from pid=18963, uid=10059 requires android.permission.READ_SMS, or grantUriPermission() 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
    Caused by: java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/inbox from pid=18963, uid=10059 requires android.permission.READ_SMS, or grantUriPermission() 
    at android.os.Parcel.readException(Parcel.java:1599) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 
    at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 
    at android.content.ContentProviderProxy.query(ContentProviderNative.java:421) 
    at android.content.ContentResolver.query(ContentResolver.java:491) 
    at android.content.ContentResolver.query(ContentResolver.java:434) 
    at inc.osi.imossis.MainActivity.onCreate(MainActivity.java:30) 
    at android.app.Activity.performCreate(Activity.java:6237) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
    at android.app.ActivityThread.-wrap11(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:5417)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

Полный файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="inc.osi.imossis"> 
    <uses-permission android:name="android.permission.READ_SMS"/> 
    <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" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

Как его решить?

+0

Показать весь манифест, пожалуйста. –

+0

@ Doug Done, пожалуйста, проверьте –

+0

Какова ваша 'targetSdkVersion'? Какую версию Android вы тестируете? – CommonsWare

ответ

0

Таким образом, я обнаружил проблему после 2 дней поиска Headbanging для решения проблемы. В эмуляторе API 23 есть ошибка, если любой из них сталкивается с этой проблемой, просто запускайте ее на другом устройстве или на эмуляторе уровня api 18 или 19 Будем работать. Спасибо

0

Вы пробовали очистить и перестроить проект?

Редактировать: Можете ли вы попробовать проверить и запросить разрешение во время выполнения?

final private int REQUEST_READ_SMS_ID = 1; // A constant needed for callback 
int hasReadSMSPermission = checkSelfPermission(Manifest.permission.READ_SMS); 
if (hasReadSMSPermission != PackageManager.PERMISSION_GRANTED) { 
    requestPermissions(new String[] {Manifest.permission.hasReadSMSPermission }, REQUEST_CODE_ASK_PERMISSIONS); 
    return; 
}` 
+0

Пробовал все в моем мозгу умереть, но безрезультатно –

0

Удалите приложение и установите его снова и попробуйте. Как видно, изменения не отражаются на повторной установке.

Если я не ошибаюсь, возможно, вы изменили файл манифеста после установки. Просто попробуйте удачу, это может сработать.

+0

Не было ошибки в эмуляторе уровня API 23 в студии Android –

Смежные вопросы