【Flutter】【Android】位置情報取得の仕方

Flutter
geolocator | Flutter package
Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.)...

概要:geolocatorというプラグインを使用して位置情報を取る方法についてメモ

■手順

インストール

geolocator install | Flutter package
Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.)...

Installingタブに書かれている通りに実行します①か②を実行します。

①ターミナルから以下を実行する

flutter pub add geolocator

②pabspec.yamlファイルに以下を手動で追加

dependencies: //これは追加するんじゃんくてもともとあるdepen‥の下に追加しろってこと
  geolocator: ^9.0.2 //Verはその時の最新で

そのあと、ターミナルからflutter pub getを実行

これでプラグインは入った

AndroidManifestを修正

geolocator | Flutter package
Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.)...

Readmeタグを選択後少し下にスクロールAndroidで必要な処理が書かれてるからそれを実行

AndroidXと書かれている件は無視します。※新規でプロジェクト作っているので、この辺りは過去にアプリ作ってる人が対応必要な内容

Premissionsに書かれているのが必要な処理

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

上記を<manifest>の下に書けとあるので従います。

ファイル場所と書き方は上図参照

エミュレータなので位置を適当に設定

androidStudioでエミュレータを起動していると上部に3つの点がありますよね、そこをクリック

Location→適当に地図上をクリック→Set Location

使用する

geolocatorを使用するdartファイルの上部に以下を追加

import 'package:geolocator/geolocator.dart';

とりあえず、位置情報をプリントするためのclassを作ってその中に以下のメソッドを追加します。

コードの大半はGPT4が吐いたコードなのでわかる範囲で補足コメントは入れました。

void getLocation() async {
  // async(非同期) はGPS位置情報の取得など時間のかかるタスクを実行できるようにする
  bool isLocationPermissionGranted =
      await requestLocationPermission(); //位置情報許可情報 //await:これが完了しないと次に進まない

  if (isLocationPermissionGranted) {
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy
            .low); //LocationAccuracy.// 位置情報の精度:高ければ高いほどバッテリー消費増
    print(position);
  } else {
    print('Access to location denied.');
  }
}

//位置情報許可を求める
Future<bool> requestLocationPermission() async {
  LocationPermission permission = await Geolocator.checkPermission();
  if (permission == LocationPermission.denied) {
    permission = await Geolocator.requestPermission();
    if (permission == LocationPermission.deniedForever) {
      return false;
    }
    if (permission == LocationPermission.denied) {
      return false;
    }
  }
  return true;
}

で、getLocation()を実行させると、

こんな感じで位置情報が出る。

あぁ、当然、位置情報の許可を下ろさないとこの結果は出ません。

※エミュレータとか起動させているようならHotreloadじゃなくてRunで実行しなおすようにしてください。

コメント

タイトルとURLをコピーしました