[Android] アプリの権限、位置情報をリクエストする実装

セキュリティ保護が必要なデータや位置情報などの権限をリクエストする場合には、考慮すべきガイドラインがGoogleから示されています。変更が多いので確認しておきます

Android Studio
2021.2.1




権限のリクエスト

 

Permission、権限のリクエストとして位置情報について当てはめてみます。
FusedLocationProvider とGoogle Mapで地図を表示
この続きです。

 

権限リクエストのワークフロー

 アプリの権限をリクエストする

にあるリクエストのワークフローは
大体このようになります。

1x1.trans - [Android] アプリの権限、位置情報をリクエストする実装

  • 以前はアプリの初期にまとめて権限リクエストをしていたこともありましたが、必要に応じてリクエストをします
  • リクエストを拒否されてもそれでアプリをシャットダウンするのではなく、その権限無しのまま継続できるようにアプリのUX設計をする
 

① マニュフェストで権限を宣言

マニュフェストに以下のACESS設定と Google play services の設定が必要です

ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
 
AndroidManifest.xml

 

④ ユーザーが権限を既に付与しているか

ユーザーがすでに権限をアプリに付与しているか確認するには、

ContextCompat.checkSelfPermission()

を使います。
付与しているかいないか、いずれかが返ってきます

  • 付与している:PERMISSION_GRANTED
  • 付与していない:PERMISSION_DENIED

 

⑤ 権限の根拠を示す必要があるか

 

この権限のリクエストが初めての場合はパスされる
ユーザーが以前に権限付与を拒否していた場合には、必要な理由やメリットを説明して理解を促すため
ActivityCompat.shouldShowRequestPermissionRationale()
を使います。

ここの実装は各自にまかされているのですが、ここではAlertDialogを使いました

必要性とメリットをユーザーに示す
OKならば
requestPermissionLauncher.launch()
でシステムが権限のリクエストを再度要求する

No Thanksなら
システムは拒否されたとして再度リクエストをすることはない場合もあります
(このあたりの実装は実機によるかもしれません)

1x1.trans - [Android] アプリの権限、位置情報をリクエストする実装

 

⑥ システムが権限を要求する

 

1x1.trans - [Android] アプリの権限、位置情報をリクエストする実装

 

⑦ ユーザーが権限を許可したか

 

権限のリクエストに対して権限が付与されたかどうかで処理をします

権限が付与されなくてもアプリはその機能を使わないままで継続することが推奨されています

 

サンプルコード

 

以下は権限リクエストを考慮してFusedLocationProviderClientで位置情報を取得しGoogleMapで地図を表示させるサンプルです
 
MainActivity.java

activity_main.xml

strings.xml

AndroidManifest.xml

build.gradle(Module…)

1x1.trans - [Android] アプリの権限、位置情報をリクエストする実装

 
アプリの設定に入れるためのボタンを追加しています
何度も拒否をしているとシステムが権限リクエストすら表示しなくなることがあるためです

もう一度この権限リクエストを取得したい場合は、アプリを再インストールするか
Setting画面でユーザーが許可を与えるしかありません

 
 

関連記事:

 

References:
直近の位置情報を取得する – Android Developers
現在地の更新情報をリクエストする – Android デベロッパー
位置情報の設定を変更する – Android デベロッパー
FusedLocationProviderClient
アプリの権限をリクエストする

シェアする

  • このエントリーをはてなブックマークに追加

フォローする