位置情報を取得するアプリを作っている際に位置情報取得許可がされていない場合に設定画面を開かせたかったのですが、あまり説明している記事がなかったので書いておきたいと思います。
位置情報取得にはgeolocatorを使用していることを想定しています。
方法
1. プラグインを導入する
端末の設定アプリを開かせるには、「permission_handler」というプラグインを使います。
プラグインを導入するためにはpubspec.ymlに以下のように記載します。
dependencies:
permission_handler: ^8.1.4+1
^8.1.4+1の部分は2021年7月25日現在の最新のバージョンを表しているので現状の最新のバージョンを確認するにはこちらのプラグインのページをご覧ください。
実際にプラグインを取得するために以下を実行します。
flutter pub get
Android Studioを使用している場合は、pubspec.ymlファイルを開いた時に右上に出てくる「Pub get」をクリックします。
2. 権限チェック実装
権限をチェックしたい部分に以下のコードを記載します。
geolocatorの機能を使い権限チェックを行います。
final GeolocatorPlatform _geolocatorPlatform = GeolocatorPlatform.instance;
LocationPermission permission;
permission = await _geolocatorPlatform.checkPermission();
if (permission == LocationPermission.deniedForever ||
permission == LocationPermission.denied) {
//設定画面を開く処理を記載します。後述を参照してください
}
位置情報取得権限がない場合は、permissionが「LocationPermission.deniedForever」もしくは、「LocationPermission.denied」になります。
3. 設定アプリを開くように実装
設定アプリを開くには
openAppSettings();
を実行します。
実装例ですが、例えば、アラートを出して設定ボタンを押した場合に設定アプリを開くように実装する場合は、
void showAlert(BuildContext context) async {
await showDialog(
context: context,
builder: (context) {
return AlertDialog(
title: Text('このアプリを利用するには位置情報取得許可が必要です。'),
content: Text("位置情報を利用します"),
actions: <Widget>[
FlatButton(
child: Text("キャンセル"),
onPressed: () => Navigator.pop(context),
),
FlatButton(
child: Text("設定"),
onPressed: () async {
openAppSettings();
},
),
],
);
});
}
となります。
この関数をステップ2のif文の中で実行すれば、権限がない場合に設定アプリを開かせることができます。
以上になります。
試してみてください。
コメントを書く