呼び出しには API レベル 23 が必要です (現在の最小値は 14) : android.app.Activity#requestPermissions,checkSelfPermission [重複] 質問する

呼び出しには 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'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;
    }

おすすめ記事