Для вызова требуется уровень 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 
}