我们确实遇到了与 Android 的 SKNavigationState 更新不一致的情况。
有时我们在开始导航后得到不一致的 SKNavigationState 对象,因此导航停止工作。
奇怪的是,有时它确实有效。首先,我们怀疑某些构建已损坏,但我们有一些构建可以正常工作,但即使部署到同一设备多次也无法正常工作。
我们尝试了 SDK 版本 2.5.0.、2.5.1 和 3.0.2 以及我们的两个版本的代码。我们有相同版本组合的工作状态和非工作状态,因此我们认为这不会产生影响。
此外,我们检查了 SKAdvisorSettings 初始化和 gradle 文件。
这是一个已知问题吗?任何人都知道如何解决它?
SKAdvisorSettings Initialization:
public void setAdvicesAndStartNavigation(Application application, SKMapSurfaceView skMapSurfaceView) {
[…]
initializeTextToSpeech(application);
final SKAdvisorSettings advisorSettings = new SKAdvisorSettings();
if (application.getResources().getConfiguration().locale.getLanguage().equals(Locale.GERMAN.toString())) {
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_DE);
advisorSettings.setAdvisorVoice("de");
} else if (application.getResources().getConfiguration().locale.getLanguage().equals(Locale.FRENCH.toString())) {
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_FR);
advisorSettings.setAdvisorVoice("fr");
} else if (application.getResources().getConfiguration().locale.getLanguage().equals("es")) {
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_ES);
advisorSettings.setAdvisorVoice("es");
} else {
advisorSettings.setLanguage(SKAdvisorSettings.SKAdvisorLanguage.LANGUAGE_EN);
advisorSettings.setAdvisorVoice("en");
}
advisorSettings.setAdvisorConfigPath([…].getMapResourcesDirPath() + "/Advisor");
advisorSettings.setResourcePath([…].getMapResourcesDirPath() + "/Advisor/Languages");
advisorSettings.setAdvisorType(SKAdvisorSettings.SKAdvisorType.TEXT_TO_SPEECH);
SKRouteManager.getInstance().setAudioAdvisorSettings(advisorSettings);
launchNavigation(application, skMapSurfaceView);
}
Example #1: incorrect distance
SKNavigationState [adviceID=-1,
currentSpeed=0.0,
currentSpeedLimit=0.0,
countryCode=,
lastAdvice=false,
showSignPost=false,
currentAdviceCurrentStreetName=,
currentAdviceNextStreetName=,
currentAdviceCurrentOsmStreetType=UNDEFINED,
currentAdviceNextOsmStreetType=UNDEFINED,
currentAdviceDistanceToAdvice=-1635951600, // <------ incorrect
currentAdviceTimeToDestination=-1636254096,
currentAdviceDistanceToDestination=-1635951952,
currentAdviceVisualAdviceFile=,
currentAdviceAudioAdvices=[None],
currentAdviceExitNumber=,
nextAdviceCurrentStreetName=,
nextAdviceNextStreetName=,
nextAdviceDistanceToAdvice=-1635998000,
nextAdviceVisualAdviceFile=,
nextAdviceCurrentOsmStreetType=UNDEFINED,
nextAdviceNextOsmStreetType=UNDEFINED,
distanceToDestination=0.0,
firstCrossingDescriptor=SKCrossingDescriptor [crossingType=0,
routeAngle=0.0,
turnToRight=false,
directionUK=false,
allowedRoutesAngles=null,
forbiddenRoutesAngles=null],
secondCrossingDescriptor=SKCrossingDescriptor [crossingType=0,
routeAngle=0.0,
turnToRight=false,
directionUK=false,
allowedRoutesAngles=null,
forbiddenRoutesAngles=null],
adviceInstruction=,
viaPointsInfo=null,
isLastVisualAdvice=false,
currentStreetDirection=DIRECTION_INVALID,
nextStreetDirection=DIRECTION_INVALID]
Example #2: distance
SKNavigationState [adviceID=0,
currentSpeed=0.0,
currentSpeedLimit=0.0,
countryCode=DE,
lastAdvice=false,
showSignPost=true,
currentAdviceCurrentStreetName=,
currentAdviceNextStreetName=,
currentAdviceCurrentOsmStreetType=TRACK,
currentAdviceNextOsmStreetType=UNDEFINED,
currentAdviceDistanceToAdvice=130, // <------ correct
currentAdviceTimeToDestination=22,
currentAdviceDistanceToDestination=130,
currentAdviceVisualAdviceFile=/storage/emulated/0/Android/data/[…].debug/files/SKMaps//Advisor/Visual/153844/0.png,
currentAdviceAudioAdvices=[in_open,
130_meters,
you_will_reach_your_destination],
currentAdviceExitNumber=,
nextAdviceCurrentStreetName=,
nextAdviceNextStreetName=,
nextAdviceDistanceToAdvice=-1582944816,
nextAdviceVisualAdviceFile=,
nextAdviceCurrentOsmStreetType=UNDEFINED,
nextAdviceNextOsmStreetType=UNDEFINED,
distanceToDestination=130.0,
firstCrossingDescriptor=SKCrossingDescriptor [crossingType=0,
routeAngle=90.0,
turnToRight=false,
directionUK=false,
allowedRoutesAngles=null,
forbiddenRoutesAngles=null],
secondCrossingDescriptor=SKCrossingDescriptor [crossingType=0,
routeAngle=0.0,
turnToRight=false,
directionUK=false,
allowedRoutesAngles=null,
forbiddenRoutesAngles=null],
adviceInstruction=in 130 meters you will reach your destination,
viaPointsInfo=null]