Genta Hirauchi

公開日: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)かで、ユーザーの選択結果を判定します。

以下は、全体のサンプルコードと、その動作の様子です。

以上、位置情報のパーミッションダイアログを表示する方法と、ユーザーの許可・拒否の選択結果を受け取る方法でした。ありがとうございました。