ProbeData Setting
この章ではプローブデータの収集設定方法を紹介します。
収集できるプローブデータの種類
DataTypeに設定できる定義と収集頻度は以下になります。
| 種別 | 説明 | 関連するアップロードデータ | デフォルト収集設定 |
|---|---|---|---|
NAVI_INFO | ナビゲーション情報 位置更新毎に記録される | navigation_log | ON |
ROUTE_ACTION_LOG | ルートに関する情報 ルートの新規探索、リルート、ルート削除等。ルート情報に変化があった場合に記録される | route_action_log | ON |
VEHICLE_INFO | 車両情報 車両情報に変化があった場合に記録される | vehicle_info | ON |
HW_SENSOR_INFO | センサ(加速度・ジャイロ)情報 | motion | OFF |
GNSS_INFO | GNSS位置情報・受信状況 | gnss_location | ON |
LOCATION_INFO | 補正後の位置情報(GPS/GNSS、WiFi基地局情報、携帯電話網基地局情報を組合せた統合位置情報集合) | fused_location | ON |
ACTIVITY_LOG_INFO | ユーザーの移動体系が変わった際の情報 前回の値(移動種別、変化した緯度経度)と今回の値の2つが記録される | activity_log | OFF |
収集を行う
プローブデータの収集はNavi.initialize()のタイミングでNaviInitInfo.setProbeDataSettingInfo()を設定します。
設定が必要な項目は以下の通りです。
| ProbeDataSettingInfo設定内容 | 関数名 | 必須/任意 |
|---|---|---|
| 収集するデータ種別 | setCollectDataTypeList | 必須 |
| データのサーバーへのアップロード間隔 | setUploadInterval | 10秒から600秒の間で任意 |
| 車両情報 | setProbeDataVehicleInfo | 任意 |
| ナビ情報の収集条件(オンロード/オフロードで収集するか、オンロードのみで収集するか) | setNaviInfoCollectCondition | ALWAYS(オンロード/オフロード)かON_ROAD(オンロードのみ)で任意。デフォルトはALWAYS |
NAVI_INFOとROUTE_ACTION_LOGを収集するサンプルコードは以下の通りです。
NaviInitInfo initInfo = new NaviInitInfo(getApplicationContext());
// 認証情報等の設定は割愛
// プローブデータの収集設定を行う
ProbeDataSettingInfo probeDataSettingInfo = new ProbeDataSettingInfo();
probeDataSettingInfo.setCollectDataTypeList(Arrays.asList(
ProbeDataSettingInfo.DataType.NAVI_INFO,
ProbeDataSettingInfo.DataType.ROUTE_ACTION_LOG));
initInfo.setProbeDataSettingInfo(probeDataSettingInfo);
// 初期化開始
Navi.getInstance().initialize(initInfo, (errorCode, naviInitResult) -> {
if (errorCode == NaviInitListener.ErrorCode.NONE) {
// データの収集と自動アップロードの開始
Navi.getInstance().startCollectProbeData();
}
});
収集を停止する
プローブデータの収集を停止するにはNavi.stopCollectProbeData()を呼び出します。
// プローブデータ収集を停止する
Navi.getInstance().stopCollectProbeData()
プローブデータをアップロードしてから収集を停止したい場合、Navi.forceUploadProbeData()を呼び出し、完了後にNavi.stopCollectProbeData()を呼び出します。
// プローブデータをアップロードしてから収集を停止する
Navi.getInstance().forceUploadProbeData(new ProbeDataForceUploadEventListener() {
@Override
public void onCompleted(ErrorCode errorCode) {
if (errorCode == ErrorCode.NONE) {
Navi.getInstance().stopCollectProbeData();
}
}
});
ACTIVITY_LOG_INFOを収集する場合
ACTIVITY_LOG_INFOの収集は、ユーザーの移動体系の変更を検知するためにActivity Recognition Transition APIを使用します。
そのため以下のアクティビティ権限が必要となります。
android.permission.ACTIVITY_RECOGNITIONcom.google.android.gms.permission.ACTIVITY_RECOGNITION
AndroidManifest.xmlに上記権限を追加し、ユーザーに使用権限リクエストを行うようにしてください。
アクティビティ権限が許可されない場合でも、基本的な機能(ナビゲーション機能等)は影響なく動作します。
ユーザーが使用権限リクエストを拒否した場合、ACTIVITY_LOG_INFOの収集は無効化されます。
収集したプローブデータを受ける
収集されたプローブデータは、一定間隔でパイオニアのクラウドサーバーへアップロードされます。
SDKを利用するアプリケーションは、このクラウドへのアップロードが成功した時点で
アップロードされたものと同一のデータをコールバックで受け取ることができます。
SDKから収集したプローブデータを受けるには
Navi.addProbeDataUploadEventListener()にてProbeDataUploadEventListenerを追加します。
追加したProbeDataUploadEventListenerはNavi.removeProbeDataUploadEventListener()で削除が可能です。
// リスナーを定義する
ProbeDataUploadEventListener listener = new ProbeDataUploadEventListener() {
@Override
public void onUploadedNavigationLog(List<ProbeDataNavigationLog> probeDataNavigationLogList) {
// ナビゲーションログが通知される
}
@Override
public void onUploadedRouteActionLog(List<ProbeDataRouteActionLog> probeDataRouteActionLogList) {
// ルートアクションログが通知される
}
@Override
public void onUploadedSystemStatusLog(List<ProbeDataGnssLocation> probeDataGnssLocationList,
List<ProbeDataFusedLocation> probeDataFusedLocationList,
List<ProbeDataMotion> probeDataMotionList,
ProbeDataVehicleInfo probeDataVehicleInfo,
List<ProbeDataActivityLog> probeDataActivityLogList) {
// システムステータスログが通知される
}
};
// リスナーを追加する
Navi.getInstance().addProbeDataUploadEventListener(listener);
// リスナーを削除する
Navi.getInstance().removeProbeDataUploadEventListener(listener);
ProbeDataUploadEventListenerの各関数はプローブデータのアップロードに成功した場合のみ通知されます。
アップロード直前のプローブデータを受ける
SDKから収集したプローブデータを受けるには
Navi.addProbeDataCollectEventListener()にてProbeDataCollectEventListenerを追加します。
追加したProbeDataCollectEventListenerはNavi.removeProbeDataCollectEventListener()で削除が可能です。
// リスナーを定義する
ProbeDataCollectEventListener listener = new ProbeDataCollectEventListener() {
@Override
public void onCollectedNavigationLog(List<ProbeDataNavigationLog> probeDataNavigationLogList) {
// ナビゲーションログが通知される
}
@Override
public void onCollectedRouteActionLog(List<ProbeDataRouteActionLog> probeDataRouteActionLogList) {
// ルートアクションログが通知される
}
@Override
public void onCollectedSystemStatusLog(List<ProbeDataGnssLocation> probeDataGnssLocationList,
List<ProbeDataFusedLocation> probeDataFusedLocationList,
List<ProbeDataMotion> probeDataMotionList,
ProbeDataVehicleInfo probeDataVehicleInfo,
List<ProbeDataActivityLog> probeDataActivityLogList) {
// システムステータスログが通知される
}
};
// リスナーを追加する
Navi.getInstance().addProbeDataCollectEventListener(listener);
// リスナーを削除する
Navi.getInstance().removeProbeDataCollectEventListener(listener);
ProbeDataCollectEventListenerの各関数はプローブデータのアップロードの成否に関わらずアップロード直前に通知されます。
プローブデータを受けるListenerの使い分けについて
各Listenerの違いは以下の通りです。
どちらを使用するかは目的に応じて決めるとよいでしょう。両方使用することも可能です。
| Listener | 通知タイミング | アップロード失敗時 | 主な用途 |
|---|---|---|---|
| ProbeDataUploadEventListener | アップロード成功時 | 失敗時は通知せず、成功時に失敗分もまとめて通知 | 実際にサーバーへ送信されたデータを取得したい場合 |
| ProbeDataCollectEventListener | アップロード直前 | 毎周期通知(失敗しても通知) | 各周期で収集したデータを取得したい場合 |
アップロード失敗が続いた場合、データ保存用のバッファが足りなくなると古いデータから削除されるため、ProbeDataUploadEventListenerでは削除された収集データは受け取ることができません。
アプリの異常終了等によりアップロードが発生しなかった場合、ProbeDataCollectEventListenerではその周期で収集したデータは受け取ることができません。