【Flutter】 locationで位置情報の取得

Flutter

locationとは

location プラグインは、AndroidおよびiOSデバイスでの位置情報の取得をサポートするFlutterプラグインです。位置情報が変更されたときにコールバックを提供します。

location | Flutter package
Cross-platform plugin for easy access to device's location in real-time.

使い方

インストール方法

パッケージの pubspec.yaml ファイルに追加します。

dependencies:
  location: ^6.0.2

Android設定

Androidでバックグラウンドモードを使用するには、位置情報にアクセスする前に enableBackgroundMode({bool enable}) APIを使用してバックグラウンドモードを有効にし、必要なパーミッションを追加します。アプリケーションの AndroidManifest.xml ファイルに次のパーミッションを追加します。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

iOS設定

iOSで使用するには、 Info.plist ファイルに次のパーミッションを追加します。

<key>NSLocationWhenInUseUsageDescription</key>
<string>アプリ使用中の位置情報の利用についての説明</string>

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>常におよびアプリ使用中の位置情報の利用についての説明</string>

<key>UIBackgroundModes</key>
<array>
  <string>location</string>
</array>

Web設定

Webの場合、特に設定は不要で、そのまま動作します。

macOS設定

macOSでは、アプリケーションが適切に「サンドボックス化」されており、位置情報が有効になっていることを確認します。これをXcodeで次の手順で行います。

  1. プロジェクトナビゲーターでアプリケーションのターゲットをクリックします。
  2. 「Capabilities」タブをクリックし、「App Sandbox」項目をオンにします。
  3. 「App Data」セクションで「Location」を選択します。
  4. Info.plist ファイルに次のパーミッションを追加します。
<key>NSLocationWhenInUseUsageDescription</key>
<string>アプリ使用中の位置情報の利用についての説明</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>常に位置情報の利用についての説明</string>

使用方法

パッケージをインポートし、位置情報サービスの状態とパーミッション状態を手動で確認します。

import 'package:location/location.dart';

Location location = new Location();

bool _serviceEnabled;
PermissionStatus _permissionGranted;
LocationData _locationData;

_serviceEnabled = await location.serviceEnabled();
if (!_serviceEnabled) {
  _serviceEnabled = await location.requestService();
  if (!_serviceEnabled) {
    return;
  }
}

_permissionGranted = await location.hasPermission();
if (_permissionGranted == PermissionStatus.denied) {
  _permissionGranted = await location.requestPermission();
  if (_permissionGranted != PermissionStatus.granted) {
    return;
  }
}

_locationData = await location.getLocation();

位置情報が変更されたときに連続してコールバックを受け取ることも可能です。

location.onLocationChanged.listen((LocationData currentLocation) {
  // 現在の位置情報を使用
});

バックグラウンドで位置情報を受け取るには、次のようにします。

location.enableBackgroundMode(enable: true)

主要なメソッド

  • requestPermission(): 位置情報のパーミッションをリクエストします。パーミッションの状態を返します。
  • hasPermission(): 位置情報のパーミッションの状態を返します。
  • serviceEnabled(): 位置情報サービスが有効かどうかを返します。
  • requestService(): 位置情報サービスを有効にするようユーザーにリクエストします。
  • changeSettings(): 位置情報リクエストの設定を変更します。
  • getLocation(): ユーザーの位置を一度だけ取得します。
  • onLocationChanged: ユーザーの位置のストリームを取得します。
  • enableBackgroundMode({bool enable}): バックグラウンドモードで位置情報を取得できるようにします。

Buy me a coffee!

Flutterアプリ開発
シェアする
sogaをフォローする
タイトルとURLをコピーしました