web-dev-qa-db-ja.com

呼び出しにはAPIレベル23が必要です(現在の最小値は14です):Android.app.Activity#requestPermissions、checkSelfPermission

実行時許可Android(6.0.1)API 23を追加しようとしています。SDKバージョンを使用する場合(minとターゲットバージョンの両方2)、次のようにうまくいきます。

    <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()の両方が機能しないことを試みました。

私が行方不明になったものは理解できませんでした。

26
Joe

ターゲットが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;
    }
32
ranjitzade

権限の確認:

ContextCompat.checkSelfPermission(Context context, String permission)

リクエスト許可:

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

またはsupport-v4 Fragment

requestPermissions(String[] permissions, int requestCode)

33
Egor

この方法を試してください

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'

または、設計サポートライブラリが必要な場合にのみ以下を追加してください

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

上記のいずれかを使用

14
Dhaval Parmar

これは、checkSelfPermission()API 2に追加されたためです。したがって、次のように条件付きでコーディングする必要があります。

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
camelCaseCoder

要求の許可を呼び出す前に、デバイスのSDKを確認してください

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