Как распознать предоставленные и непринятые разрешения?

Я использую этот код для распознавания разрешений в onCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
     requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 100);

И в действии я использую этот фрагмент кода, чтобы проверить, разрешить или запретить разрешения:

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
  switch (requestCode) {
     case 100: {
         if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
             Toast.makeText(getApplicationContext(), "Ok", Toast.LENGTH_SHORT).show();
         else
             Toast.makeText(getApplicationContext(), "No", Toast.LENGTH_SHORT).show();
     }
  }
}

и в Manifest.xml:

<!-- *****  Uses Permission  ***** -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

Но он всегда возвращает нулевое значение в коде, как при проверке, так и при отклонении.

Как мне узнать, подтвердил ли пользователь или отклонил?

1 ответ

Решение

Я попробовал ваш пример, и он дает правильный результат с 0 и -1.0 для Разрешено и -1 для Отказано.

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

01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[0]= android.permission.READ_PHONE_STATE grantResults[0]= 0
01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[1]= android.permission.WRITE_EXTERNAL_STORAGE grantResults[1]= -1
01-13 13:00:29.134 30051-30051/com.usense.netsense I/get_permission:  permissions[2]= android.permission.READ_EXTERNAL_STORAGE grantResults[2]= -1
Другие вопросы по тегам