実行時許可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()
の両方が機能しないことを試みました。
私が行方不明になったものは理解できませんでした。
ターゲットが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;
}
権限の確認:
ContextCompat.checkSelfPermission(Context context, String permission)
リクエスト許可:
ActivityCompat.requestPermissions(Activity activity, String[] permissions, int requestCode)
またはsupport-v4 Fragment
内
requestPermissions(String[] permissions, int requestCode)
この方法を試してください
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'
上記のいずれかを使用
これは、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
}
要求の許可を呼び出す前に、デバイスのSDKを確認してください
if(Build.VERSION.SDK_INT==Build.VERSION_CODES.M)
{
//call the request permission here
}