Установщик пакетов падает в Android M после запроса разрешения READ_SMS

У меня есть Фрагмент входа, который пытается получить доступ (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); это хорошо работает с устройствами до Lollipop 5.1. И когда я попробовал это в Зефире 6.01, это показало исключение безопасности. Поэтому я добавил код из документации Android, чтобы запросить разрешение во время выполнения. Вот код

int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.READ_SMS);
    if (permissionCheck != PackageManager.PERMISSION_GRANTED) {

        // Should we show an explanation?
        if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_SMS)) {

            // Show an expanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.



        } else {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions(getActivity(),new String[]{Manifest.permission.READ_SMS},REQUEST_SMS);

            // REQUEST_SMS is an
            // app-defined int constant. The callback method gets the
            // result of the request.
        }
    }else {
        tMgr = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);

    }

Теперь мое приложение запускается, и вскоре мой установщик пакета падает. Вот лог

03-23 12:12:13.618 8949-8949/com.android.packageinstaller E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.android.packageinstaller, PID: 8949
    Theme: themes:{default=overlay:system, iconPack:system, fontPkg:system, com.android.systemui=overlay:system}
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.packageinstaller/com.android.packageinstaller.permission.ui.GrantPermissionsActivity}: java.lang.NullPointerException: Attempt to get length of null array
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2450)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5466)
        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.NullPointerException: Attempt to get length of null array
        at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.computePermissionGrantState(GrantPermissionsActivity.java:293)
        at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.updateDefaultResults(GrantPermissionsActivity.java:343)
        at com.android.packageinstaller.permission.ui.GrantPermissionsActivity.onCreate(GrantPermissionsActivity.java:100)
        at android.app.Activity.performCreate(Activity.java:6251)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5466) 
        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)

Я думаю, что установщик пакета падает, когда приложение пытается отобразить пользовательский интерфейс для запроса разрешений. я уже добавила <uses-permission android:name="android.permission.READ_SMS"/> в моем манифесте

2 ответа

Решение

Вы ограничили READ_SMS явное разрешение на API 22 и ниже.

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

Как я уже упоминал в комментариях, это разрешение манифеста все еще необходимо в Marshmallow и выше, в дополнение к запросу времени выполнения. Удалить maxSdkVersion атрибут из элемента разрешения.

Объявите разрешение в манифесте так:

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

Имейте в виду, нет maxSdkVersion приписывать. Ссылка