ProbeData Setting

この章ではプローブデータの収集設定方法を紹介します。

収集できるプローブデータの種類

DataTypeに設定できる定義と収集頻度は以下になります。

種別説明関連するアップロードデータデフォルト収集設定
NAVI_INFOナビゲーション情報
位置更新毎に記録される
navigation_logON
ROUTE_ACTION_LOGルートに関する情報
ルートの新規探索、リルート、ルート削除等。ルート情報に変化があった場合に記録される
route_action_logON
VEHICLE_INFO車両情報
車両情報に変化があった場合に記録される
vehicle_infoON
HW_SENSOR_INFOセンサ(加速度・ジャイロ)情報motionOFF
GNSS_INFOGNSS位置情報・受信状況gnss_locationON
LOCATION_INFO補正後の位置情報(GPS/GNSS、WiFi基地局情報、携帯電話網基地局情報を組合せた統合位置情報集合)fused_locationON
ACTIVITY_LOG_INFOユーザーの移動体系が変わった際の情報
前回の値(移動種別、変化した緯度経度)と今回の値の2つが記録される
activity_logOFF

収集を行う

プローブデータの収集はNavi.initialize()のタイミングでNaviInitInfo.setProbeDataSettingInfo()を設定します。

設定が必要な項目は以下の通りです。

ProbeDataSettingInfo設定内容関数名必須/任意
収集するデータ種別setCollectDataTypeList必須
データのサーバーへのアップロード間隔setUploadInterval10秒から600秒の間で任意
車両情報setProbeDataVehicleInfo任意
ナビ情報の収集条件(オンロード/オフロードで収集するか、オンロードのみで収集するか)setNaviInfoCollectConditionALWAYS(オンロード/オフロード)かON_ROAD(オンロードのみ)で任意。デフォルトはALWAYS

NAVI_INFOROUTE_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_RECOGNITION
  • com.google.android.gms.permission.ACTIVITY_RECOGNITION

AndroidManifest.xmlに上記権限を追加し、ユーザーに使用権限リクエストを行うようにしてください。

アクティビティ権限が許可されない場合でも、基本的な機能(ナビゲーション機能等)は影響なく動作します。

ユーザーが使用権限リクエストを拒否した場合、ACTIVITY_LOG_INFOの収集は無効化されます。

収集したプローブデータを受ける

収集されたプローブデータは、一定間隔でパイオニアのクラウドサーバーへアップロードされます。
SDKを利用するアプリケーションは、このクラウドへのアップロードが成功した時点で
アップロードされたものと同一のデータをコールバックで受け取ることができます。

SDKから収集したプローブデータを受けるには
Navi.addProbeDataUploadEventListener()にてProbeDataUploadEventListenerを追加します。
追加したProbeDataUploadEventListenerNavi.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);
Note:

ProbeDataUploadEventListenerの各関数はプローブデータのアップロードに成功した場合のみ通知されます。

アップロード直前のプローブデータを受ける

SDKから収集したプローブデータを受けるには
Navi.addProbeDataCollectEventListener()にてProbeDataCollectEventListenerを追加します。
追加したProbeDataCollectEventListenerNavi.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);
Note:

ProbeDataCollectEventListenerの各関数はプローブデータのアップロードの成否に関わらずアップロード直前に通知されます。

プローブデータを受けるListenerの使い分けについて

各Listenerの違いは以下の通りです。
どちらを使用するかは目的に応じて決めるとよいでしょう。両方使用することも可能です。

Listener通知タイミングアップロード失敗時主な用途
ProbeDataUploadEventListenerアップロード成功時失敗時は通知せず、成功時に失敗分もまとめて通知実際にサーバーへ送信されたデータを取得したい場合
ProbeDataCollectEventListenerアップロード直前毎周期通知(失敗しても通知)各周期で収集したデータを取得したい場合
Note:

アップロード失敗が続いた場合、データ保存用のバッファが足りなくなると古いデータから削除されるため、ProbeDataUploadEventListenerでは削除された収集データは受け取ることができません。
アプリの異常終了等によりアップロードが発生しなかった場合、ProbeDataCollectEventListenerではその周期で収集したデータは受け取ることができません。