17

Я пытаюсь добавить разрешения во время выполнения android (6.0.1) API 23, если я использую версию SDK (min и target версия и 23) это ковшики хорошо, как показано ниже,Для вызова требуется уровень API 23 (текущий минимум равен 14): android.app.Activity # requestPermissions, checkSelfPermission

<uses-sdk 
       android:minSdkVersion="23" 
       android:targetSdkVersion="23" /> 

Если изменить андроида: minSdkVersion (менее 23)

Например:

я получаю ошибку ниже:

Вызов требует уровень API 23 (ток мин 14): android.app.Activity # requestPermissions, checkSelfPermission

Для следующих 2 метода,

1)requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS) 

2)checkSelfPermission(permission) 

Я попытался ActivityCompat.checkSelfPermission() и ContextCompat.checkSelfPermission() оба не работают.

Что я пропущено не мог понять ..

+1

ContextCompat.checkSelfPermission() именно то, что вы хотите, не могли бы вы, пожалуйста, более конкретно, почему он не работает? – Egor

+0

Получаете ли вы какие-либо ошибки при использовании ActivityCompat или ContextCompat? Если да, то какая ошибка? – Srijith

+0

следующая ошибка, которую я получаю, если я использую ActivityCompat «Метод checkSelfPermission (String) не определен для типа ActivityCompat« – Joe

ответ

22

Либо проверить цель> = 23 или просто добавить ниже линии выше вашего метода

@TargetApi(Build.VERSION_CODES.M) 

Например, если вы проверяете для разрешений хранения, то вы можете обратиться к этой функции,

@TargetApi(Build.VERSION_CODES.M) 
    public boolean CheckStoragePermission() { 
     int permissionCheckRead = ContextCompat.checkSelfPermission(context, 
       Manifest.permission.READ_EXTERNAL_STORAGE); 
     if (permissionCheckRead != PackageManager.PERMISSION_GRANTED) { 
      if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context, 
        Manifest.permission.READ_EXTERNAL_STORAGE)) { 
       // 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. 
       ActivityCompat.requestPermissions((Activity) context, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         Define.PERMISSION_STORAGE); 
      } else { 
       // No explanation needed, we can request the permission. 

       ActivityCompat.requestPermissions((Activity) context, 
         new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
         Define.PERMISSION_STORAGE); 

       // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
       // app-defined int constant. The callback method gets the 
       // result of the request. 
      } 
      return false; 
     } else 
      return true; 
    } 
+0

Спасибо, ваше решение также работает :) – Joe

0

Проверьте устройство SDK перед вызовом разрешения запроса

if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M) 
{ 
//call the request permission here 
} 
11

попробовать этот способ

if (Build.VERSION.SDK_INT < 23) { 
     // your code 
} else { 
    if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE) 
       != PackageManager.PERMISSION_GRANTED) { 
      requestContactsPermissions1(); 
    } else { 
     // your code 
    } 
} 

Редакция:

Добавить в зависимости блок в более низкого уровня (ваше приложение) build.gradle:

compile 'com.android.support:appcompat-v7:23.1.1' 

или добавить ниже, только если вам нужна поддержка проектирования Lib

compile 'com.android.support:design:23.1.1' 

использовать один из выше

+0

следующее сообщение об ошибке, которое я получаю, если я использую ActivityCompat «Метод checkSelfPermission (String) не определено для типа ActivityCompat « – Joe

+0

@Joe: проверить отредактированный ответ –

3

Это потому, что checkSelfPermission() был добавлено в API 23.Так что вам придется код условно нравится:

if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ 
    //use checkSelfPermission() 
} else { 
    //simply use the required feature 
    //as the user has already granted permission to them during installation 
} 
+0

следующее ошибка, которую я получаю, если я использую ActivityCompat« Метод checkSelfPermission (String) не определен для типа ActivityCompat « – Joe

+0

@Joe У вас есть посмотри на это? http://stackoverflow.com/a/34613112/5352802 – camelCaseCoder

+0

Ya похоже, что у меня такая же проблема, я использую eclipse, как добавить, не могли бы вы уточнить. – Joe

22

Проверка разрешений:

ContextCompat.checkSelfPermission(Context context, String permission)

Запрос разрешения:

ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)

или внутри опоры-v4 Fragment

requestPermissions(String[] permissions, int requestCode)

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