アプリ起動時に外部ストレージのアクセス許可を行い、ユーザが”許可しない”を選択するとアプリを終了する設計をしていました。
このような設計をしていた場合、Android 11では「アプリ起動」後すぐに「アプリ終了」となってしまう可能性があります。
本記事ではこの点について触れてみたいと思います。
Android 11の「権限ダイアログ」に関する変更について
Android 11では、外部ストレージ・位置情報・マイクといった許可リクエストが必要なものに対してユーザが「許可しない」を繰り返し選択した場合、
「今後表示しないことを希望している」とみなされるようになります。
Android DeveloperのAndroid11での権限に関する更新も合わせて参照してみて下さい。
onRequestPermissionsResultの挙動について
@Override public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (grantResults.length <= 0) { return; } if(requestCode == REQUEST_PERMISSION){ if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { /// 許可された場合 } else { /// 許可されなかった場合 finish(); //←ここでfinish()をするとAndroid 11だと不具合につながる! } } }
onRequestPermissionsResult()は権限ダイアログの結果を受けるメソッドです。
ユーザが繰り返し「許可しない」を選択した場合、
Android 11ではonRequestPermissionsResult()の第二引数grantResultsの中身は「-1」が即通知されていました。
対策について
繰り返し許可しないを選択した場合の対策としては以下が考えられます。
※今後追加する場合あり。
- 権限が必要なタイミングで権限ダイアログを表示し、許可されなかった場合はその機能が使用不可であることを明示する
- Settingsアプリから権限有効に出来ることを明示する
- 許可しない場合のアプリ設計を見直す(アプリが終了してしまう設計は要見直し)