Data Update
この章では使用する地図データを更新するための方法を紹介します。
最新地図データ利用可能通知
サーバ上の地図データは定期的に最新のデータに更新されますが、古いデータも1つだけ保持されており、最新とその1つ前のデータが利用可能です。
使用中の地図データより新しいバージョンの地図データを検出した場合、DataUpdateListener
を通じてアプリに通知されますが、検出されたデータバージョンのパターンによりそれぞれ以下の関数を通じて通知されます。
-
dataUpdated()
- 使用中の地図データバージョンが最新ではないが、サーバ上に地図データが存在し動作が可能な場合に通知
- 例)
- SDKが使用中のバージョン:"1"
- 最新のバージョン:"2"
- サーバ上で保持されている地図バージョン:"1", "2"
- SDKが使用中のバージョン"1"が保持されているため動作可能
-
dataDeleted()
- 使用中の地図データバージョンが最新でなく、サーバ上に地図データが存在せず動作が不可能な場合に通知
- 例)
- SDKが使用中のバージョン:"1"
- 最新のバージョン:"3"
- サーバ上で保持されている地図バージョン:"2", "3"
- SDKが使用中のバージョン"1"が保持されていないため動作不可能
通知を受信するためのサンプルコードは以下の通りです。
NaviInitInfo initInfo = new NaviInitInfo(this);
initInfo.setDataUpdateListener(new DataUpdateListener() {
@Override
public void dataUpdated(boolean hasRoute, NaviInitInfo.DataHandlingProcess dataHandlingProcess) {
}
@Override
public void dataDeleted(boolean hasRoute, NaviInitInfo.DataHandlingProcess dataHandlingProcess) {
}
}
使用地図データ更新処理
SDKではサーバ上のどの地図データを使用するかという情報を保持しています。DataUpdateListener
は最新の地図データの検出を通知するのみで、使用する地図データそのものは更新されません。地図データの更新はアプリの再起動後のSDK初期化処理中に行われます。
アプリ動作中の更新処理
dataUpdate()
受信時
地図データ更新はアプリの再起動後のSDK初期化処理中に行われるため、アプリ動作中に最新地図データ利用可能通知を受信し、使用中の地図データを更新する場合はアプリの再起動が必要です。
ただしDataUpdateListener.dataUpdated()
通知ではサーバ上に現在使用中の地図データが保持されているため、再起動せずそのまま動作を継続することも可能です。
dataDeleted()
受信時
DataUpdateListener.dataDeleted()
通知ではサーバ上に現在使用中の地図データが存在しないため、そのまま動作を継続することができません。再起動を行い、使用中の地図データの更新を行う必要があります。
SDK初期化中の更新処理
アプリ起動中のSDK初期化処理時に、SDKでは現在使用中の地図データより新しい地図データがサーバ上で利用可能かどうかのチェックを行なっており、利用可能な場合は使用する地図データを最新のものに更新します。
また前回動作中にルートが引かれておりそのルートの案内中だった場合、そのルートは古い地図データ用のルートであるため削除され、自動的に最新の地図データ用のルートが再探索され地図上に反映されます。
DataUpdateListener.dataUpdated()/dataDeleted()
通知を受信して再起動を行っていない場合でも新しい地図データがサーバ上で利用可能であることが検出された場合も同ように更新処理が行われます。
SDK初期化中の地図データ更新処理中にもDataUpdateListener.dataUpdated()
, DataUpdateListener.dataDeleted()
通知は行われます。SDK初期化中の通知とアプリ動作中の通知は通知時のdataHandlingProcess
で以下のように判別可能です。
- SDK初期化中の場合
DataHandlingProcess.UPDATE_WITH_ROUTE
- アプリ動作中の場合
DataHandlingProcess.STAY
再起動を繰り返してしまうため、SDK初期化中のDataUpdateListener.dataUpdated()
, DataUpdateListener.dataDeleted()
通知ではアプリの再起動は行わないで下さい。
NaviInitInfo initInfo = new NaviInitInfo(this);
initInfo.setDataUpdateListener(new DataUpdateListener() {
@Override
public void dataUpdated(boolean hasRoute, NaviInitInfo.DataHandlingProcess dataHandlingProcess) {
if (dataHandlingProcess == NaviInitInfo.DataHandlingProcess.STAY) {
// アプリ動作中の場合。データ更新する場合はアプリの再起動が必要
}
else if (dataHandlingProcess == NaviInitInfo.DataHandlingProcess.UPDATE_WITH_ROUTE) {
// SDK初期化中の場合。再起動してはいけない
}
else {
// エラー処理
}
}
@Override
public void dataDeleted(boolean hasRoute, NaviInitInfo.DataHandlingProcess dataHandlingProcess) {
if (dataHandlingProcess == NaviInitInfo.DataHandlingProcess.STAY) {
// アプリ動作中の場合。アプリの再起動が必要
}
else if (dataHandlingProcess == NaviInitInfo.DataHandlingProcess.UPDATE_WITH_ROUTE) {
// SDK初期化中の場合。再起動してはいけない
}
else {
// エラー処理
}
}
}
使用地図データ更新完了通知
地図データの更新はアプリの再起動後のSDK初期化処理中に行われ、更新完了時にDataUpdateListener.dataUpdateCompleted()
によって通知されます。
NaviInitInfo initInfo = new NaviInitInfo(this);
initInfo.setDataUpdateListener(new DataUpdateListener() {
@Override
public void dataUpdateCompleted(DataUpdateCompleteListener.ErrorCode dataUpdateErrorCode, CalcRouteListener.ErrorCode routeErrorCode, CalcRouteResult calcRouteResult) {
// ルートが再探索された場合はcalcRouteResultに結果が格納される
}
}
この通知を受け取ることでアプリはナビゲーション用の地図データの更新をユーザーに知らせることができます。