公開日:2020/07/17更新日:2020/08/03
【Kotlin】位置情報のパーミッションダイアログを表示する方法を解説

- 位置情報の権限確認ダイアログを表示したい
- ユーザーの許可・拒否の選択結果を受け取りたい
Android 6.0以降の端末では、GPSなどの位置情報を扱うアプリを実装する場合、ユーザーに位置情報の使用許可を問う、パーミッションダイアログを表示する必要があります。
本記事では、位置情報のパーミッションダイアログを表示する方法と、ユーザーの許可・拒否の選択結果を受け取る方法について解説致します。
目次
位置情報のパーミッションダイアログを表示する
パーミッションの宣言
まずは、AndroidManifest.xmlに、使用するパーミッションを宣言します。
ACCESS_FINE_LOCATIONは、GPSやWi-Fi、モバイルデータなど、利用可能な位置情報プロバイダを使用し、できる限り正確な位置情報の特定を行います。
ACCESS_COARSE_LOCATIONは、Wi-Fiかモバイルルータ、あるいはその両方を使用し、都市の1区画程度の制度で位置情報の特定を行います。
アプリがどの程度の精度を求めているかによって、使い分ける必要があります。今回はACCESS_FINE_LOCATIONを使用することにします。
パーミッションの状態確認
続いて、位置情報のパーミッションの状態を確認する方法についてです。パーミッションの状態を確認するには、ContextCompat.checkSelfPermission()を使用します。
checkSelfPermission()の第1引数にはContextを、第2引数には、パーミッションの種類を指定します。
checkSelfPermission()の戻り値はint側で、許可されている場合は0、許可されていない場合は-1が返ってきます。PackageManagerには、PERMISSION_GRANTED(0)と、PERMISSION_DENIED(-1)が定義されておりますので、結果の確認にはこれらを使用するのがいいと思います。
パーミッションダイアログの表示
最後に、位置情報のパーミッションダイアログを表示する方法についてです。パーミッションダイアログを表示するには、ActivityCompat.requestPermissions()を使用します。
requestPermissions()の第1引数にはContextを、第2引数には、パーミッションの種類を配列で指定します。
第3引数には、任意のRequestCodeを指定します。このRequestCodeは、ユーザーの許可・拒否の選択結果を受け取る際に、どのパーミッションリクエストかを判定するために使用されます。サンプルコードでは直接数値を指定しておりますが、定数を使用することをお勧めします。
ユーザーの許可・拒否の選択結果を受け取る
続いて、ユーザーが許可したかどうかの結果を受け取る方法について解説致します。
ユーザーの選択結果を受け取るには、onRequestPermissionsResult()を実装します。
onRequestPermissionsResult()は、ユーザーがパーミッションリクエストに応答した際に、システムが呼び出す関数です。位置情報以外のパーミッションリクエストの応答でも呼ばれるため、第1引数のrequestCodeで、どのリクエストかを判定します。
先ほど紹介したrequestPermissions()で、RequestCodeに100を指定していたので、if (requestCode == 100)という判定で、位置情報のリクエストの応答かを判定しております。
第3引数のgrantResults[0]には、応答結果が格納されております。checkSelfPermission()の時のように、PERMISSION_GRANTED(0)かPERMISSION_DENIED(-1)かで、ユーザーの選択結果を判定します。
以下は、全体のサンプルコードと、その動作の様子です。
以上、位置情報のパーミッションダイアログを表示する方法と、ユーザーの許可・拒否の選択結果を受け取る方法でした。ありがとうございました。