Real-Time Location Tracking Using Google’s Fused Location Provider API

Imal Kumarage
Imal Kumarage

Follow
7/9, 2020 – 3 min read

Photo by henry perks on Unsplash

Location Uberをはじめとする様々なサービスが、一貫性と正確さが求められる位置情報サービスに大きく依存しており、追跡と監視は現代のアプリケーション開発で急増しています。 ビジネスや企業が位置情報やさまざまな資産の監視を必要とする中、包括的な位置情報ソリューションを提供することは、多くの開発者にとって厄介な科学でした。

Google は、便利な位置情報提供サービスに対する需要の高まりに着目し、Fused Location Provider API を導入しました。 この記事では、Android アプリケーションを使用してユーザーのリアルタイムの位置を追跡するために API を使用することに焦点を当て、例を通じて API の素晴らしさを実証します。 主なセールスポイントは、提供されたリクエスト・パラメータに基づいて、これら3つのリソースをどのような組み合わせで使用するかを決定することです。 このコンテキストでは、これらのリソースの管理は開発者から抽象化されます。

API の能力を示す簡単なユースケースは、建物に向かって歩き、建物に入り、そして出て行く個人の動きを追跡することです。 このシナリオでは、人が屋外にいるとき、GPS サービスはうまく機能します。 しかし、建物の中に入ると、GPS信号が低下する可能性があります。 Fused Location Providerは、屋外ではGPSで位置を追跡し、建物内でGPS信号が低下するとWi-Fiを利用して、上記のシナリオに対応する。 GPSからWi-Fiへの切り替えの際には、よりスムーズな切り替えを実現するために、端末の内蔵センサーで動きを予測する。 このように、利用可能なリソースを管理して、バッテリー効率のよい方法で信頼性の高い位置情報サービスを提供することが、APIの真の力です。

Android アプリケーションに API を組み込むのは簡単なプロセスです。 この例では、簡単な位置追跡アプリケーションを構築するために必要な手順を説明します。

最初に、Android Studio で Android プロジェクトを作成し、アプリケーションの build.

dependencies{
implementation 'com.google.android.gms:play-services:11.8.0'
}

次に、Manifest ファイル内に以下のスニペットを追加して、Fine または Coarse の位置情報アクセス権を提供する必要があります:

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

次に、FusedLocationProviderClient、LocationRequest、および LocationCallBack のインスタンスをアクティビティ内に作成します。

private FusedLocationProviderClient fusedLocationClient;private LocationRequest locationRequest;
private LocationCallback locationCallback;@Override
protected void onCreate(Bundle savedInstanceState) {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
}

LocationRequestオブジェクトは、更新頻度、精度レベル、バッテリー効率などの詳細を提供し、ユースケースのパラメータに従ってロケーションリクエストを構築するために使用されます。 希望するパラメーターに基づいて位置情報要求を構築するメソッドを作成します。

private void buildLocationRequest() {locationRequest = new LocationRequest(); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setInterval(100);locationRequest.setFastestInterval(100); locationRequest.setSmallestDisplacement(1);
}//Build the location callback object and obtain the location results //as demonstrated below:private void buildLocationCallBack() {
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
for (Location location: locationResult.getLocations()){
String latitude = String.valueOf(location.getLatitude());
String longitude = String.valueOf(location.getLongitude());
}
}
};
}

LocationRequest オブジェクトと LocationCallBack オブジェクトが初期化されたら、FusedLocationProviderClient の requestLocationUpdates メソッドを呼び出して位置情報を要求してください。

FusedLocationProviderClient.requestLocationUpdates
(
locationRequest,
locationCallback,
null
);

リクエストで定義されたパラメータに基づいて、APIは位置監視やリアルタイムの速度追跡など、多くの機能を実行するために利用できる適切な位置情報を提供し続けます。

Fused Location Provider API は、開発者からその内部動作を抽象化し、必要なサービスの品質と精度を指定するハイレベルなメソッドを提供することにより、すべての基礎となる位置情報テクノロジーを管理するための便利な方法を提供します。 以下のリンクから開始してください:

https://developers.google.com/location-context/fused-location-provider6668

Leave a Reply