Для вызова требуется уровень API 23 (текущий минимум равен 14): android.app.Activity # requestPermissions, checkSelfPermission
Я пытаюсь добавить разрешения времени выполнения android (6.0.1) API 23. Если я использую версию SDK (мин и целевая версия как 23), она будет нормально, как показано ниже,
<uses-sdk
android:minSdkVersion="23"
android:targetSdkVersion="23" />
Если я изменяю android: 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
Либо проверьте для цели >= 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 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;
}
Ответ 2
Проверить разрешения:
ContextCompat.checkSelfPermission(Context context, String permission)
Разрешение запроса:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
или внутри поддержки-v4 Fragment
requestPermissions(String[] permissions, int requestCode)
Ответ 3
попробуй так
if (Build.VERSION.SDK_INT >= 23) {
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'
используйте один из вышеперечисленных
Ответ 4
Это связано с тем, что 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
}
Ответ 5
проверить устройство sdk перед вызовом разрешения запроса
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
{
//call the request permission here
}