私は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;
}