私は同じ問題に直面しました。Android には 2 種類のアクセス許可があります。
- 危険(連絡先へのアクセス、外部ストレージへの書き込み...)
- 通常 (通常のアクセス許可は Android によって自動的に承認されますが、危険なアクセス許可は Android ユーザーによって承認される必要があります。)
Android 6.0 で危険なパーミッションを取得するための戦略は次のとおりです。
- 権限が付与されているかどうかを確認します
- アプリに既にアクセス許可が付与されている場合は、通常どおり実行してください。
- アプリにまだ権限がない場合は、ユーザーに承認を求める
- でユーザーの承認を聞く
onRequestPermissionsResult
これが私のケースです。外部ストレージに書き込む必要があります。
まず、許可があるかどうかを確認します。
...
private static final int REQUEST_WRITE_STORAGE = 112;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}
次に、ユーザーの承認を確認します。
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}
}