Android M パーミッション対応
Android 6 Marshmallowからパーミッションの取得タイミングが変わった
これまでGoogle Playでのインストール時に全てのパーミッションを要求されていました。
皆さんの中にも「このパーミッションは何に使われてるの?」と疑問に思われたことのある方や、「使わない機能で必要なパーミッションを求められている」と感じたことのある方がいらっしゃるのではないでしょうか。
Android 6(APIレベル23)以降ではそんな気がかりはなくなります。
Google Playでは何もせず、それぞれのパーミッションが必要なタイミングで要求できる(される)ようになります。
実装
実装方法はこんな感じです。(ちょっとややこしくなった感)
AndroidManifest.xml
<!-- RECORD_AUDIO=マイクのパーミッションを例とする --> <uses -permission android:name="android.permission.RECORD_AUDIO" />
MainActivity.java
... private static final int REQUEST_CODE = 1; ... @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 権限がない時 if (PermissionChecker.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) { // 許可ダイアログの再表示判定 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO) { new AlertDialog.Builder(this) .setTitle("パーミッションの追加説明") .setMessage("このアプリで○○するにはマイクのパーミッションが必要です。") .setPositiveButton("設定" new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // パーミッションを要求する ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_CODE); } }) .create() .show(); return; } // 一度もパーミッションの要求をしていない or 今後表示しないにチェックをした上で”許可しない”にした時 // 今後表示しないにしている場合はrequestPermissionsしても何も起こらないので、実質初回パーミッション要求時の対応 // 初回とは初回起動という意味ではなく、パーミッションのON/OFF切り替え時も含まれる ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_CODE); } } } @Override // パーミッション要求の結果を受け取る public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // パーミッションが必要な処理 } else { // パーミッションが得られなかった場合の対応 } } } } ...
参考になるサイト
システム パーミッションの使用 | Android Developers
CheckSelfPermissionの注意事項 - リスクファインダーブログ
初心者のためのM Permissions入門 | TechBooster