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

Flutter

locationとは

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

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

使い方

インストール方法

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

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})

バックグラウンドモードで位置情報を取得できるようにします。

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