Androidでパーミッション許可ダイアログの出し方

Androidでのパーミッションについて

昔(APIレベル < 23)はこんな緩い許可でOKでした。

  • ただAndroidManifest.xmlに書くだけ
  • インストール時に自動的に許可される

これは大昔の話。

現在(APIレベル >=  23)はスゴク厳格になってます。

いわゆるパーミッション許可ダイアログの表示必須です。

意外とやり方が面倒だったので、
ここでは そのパーミッション許可ダイアログの出し方 をまとめました。

許可ダイアログを出す必要があるパーミッションの種類

まずパーミッションと許可ダイアログについて

別に全パーミッションで必須なわけじゃないです。

一部の Dangerousパーミッション に必要になります。

▼ 公式での Dangerousパーミッション の解説

Dangerous パーミッションは、アプリがユーザーの個人情報を含むデータやリソースを必要とする、あるいはユーザーが保存したデータや他のアプリ操作に影響を及ぼす可能性があるケースを対象とします。たとえば、ユーザーのコンテンツを読み取る機能には、Dangerous パーミッションが必要です。アプリが Dangerous パーミッションが必要性であると宣言している場合、ユーザーはアプリに明示的にパーミッションを付与しなければなりません。

引用元 : https://developer.android.com/guide/topics/security/permissions?hl=ja

個人情報を含むデータやリソース

ここが重要なところ

 

一例(というか全部?)を挙げると、以下の通りです。

抜けてるパーミッションがあれば教えてください。

  • READ_CALENDAR
  • WRITE_CALENDAR
  • CAMERA
  • READ_CONTACTS
  • WRITE_CONTACTS
  • GET_ACCOUNTS
  • ACCESS_FINE_LOCATION
  • ACCESS_COARSE_LOCATION
  • RECORD_AUDIO
  • READ_PHONE_STATE
  • CALL_PHONE
  • READ_CALL_LOG
  • WRITE_CALL_LOG
  • ADD_VOICEMAIL
  • USE_SIP
  • PROCESS_OUTGOING_CALLS
  • BODY_SENSORS
  • READ_EXTERNAL_STORAGE
  • WRITE_EXTERNAL_STORAGE

アプリを確実にAPIレベル23以降に対応させたいなら・・・

これらパーミッションの許可ダイアログ表示が必要

よく使うのは WRITE_EXTERNAL_STORAGE とかですね。

パーミッション許可ダイアログの表示手順&コード例

実際にとあるアプリでは、以下2つの権限が必要でした。

  • WRITE_EXTERNAL_STORAGE
  • READ_CONTACTS

これを例に取ると、以下手順でダイアログ表示できます。

1.普通にAndroidManifest.xmlに権限追加

まずは AndroidManifest.xml の編集

ここに今まで通りパーミッションを追加します。

▼ ここでは2つのパーミッションを追加

Android6.0以上では、これだけでは不完全です。

起動時にも許可を取るコードが必要になりました。

2.許可ダイアログを起動時に表示する

そしたら次からが肝心な処理です。

許可ダイアログの表示

以下の条件に当てはまるなら、表示しないとダメです。

  • Android6.0以降に対応させる場合
  • APIレベル23以降に対応させる場合
  • そのうえで許可を取れていない場合

 

実際には onCreate 内にこういうコード書いてみました。

▼ onCreate内にて・・・

▼ またActivityの内側に定数も宣言しておく

ちなみに対応は Build.VERSION.SDK_INT >= 23  だけでOK。

それ以前のバージョンでは許可ダイアログは不要なようです。

3.許可ダイアログの結果を受け取る

許可ダイアログを表示したら・・・

その許可ダイアログの結果受け取りが必要

結果には大きく分けて次の2種類があります。

  • 許可が取れた場合
    => そのまま通常通りにアプリを起動する
  • 許可が取れなかった場合
    => 再度許可を取ったりトースト表示したり

結果は onRequestPermissionsResult  をオーバーライドして受け取り可能です。

 

実際に書いてみたコードは以下のようなもの

▼ Actiivty内でオーバーライド

こういう感じ。

許可が取れない場合はトースト表示してます。

 

実際にこのコードを追加すると・・・

起動時にこんなダイアログが表示されます。

▼ WRITE_EXTERNAL_STORAGE の許可ダイアログ

WRITE_EXTERNAL_STORAGE の許可ダイアログの表示例

▼ READ_CONTACTS の許可ダイアログ

READ_CONTACTS の許可ダイアログの表示例

よく見かけるダイアログが表示できました。

これで心置きなくアプリリリースできます。

ここまでのまとめ - 許可ダイアログは必ず表示しよう

という訳で許可ダイアログ表示についてでした。

  • Android6.0以降に対応させたい
  • 個人情報を含むデータにアクセスする

そんな場合はパーミッションリクエスト必須ですね。

アプリ公開前に必ず実装するようにしたいです。

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください


Warning: array_keys() expects parameter 1 to be array, null given in /home/pisuke/public_html/pisuke-code.com/wp-content/themes/sentry-master/merchant-for-paid-ad.php on line 219

Warning: array_keys() expects parameter 1 to be array, null given in /home/pisuke/public_html/pisuke-code.com/wp-content/themes/sentry-master/merchant-for-paid-ad.php on line 219

Warning: Invalid argument supplied for foreach() in /home/pisuke/public_html/pisuke-code.com/wp-content/themes/sentry-master/merchant-for-paid-ad.php on line 135