内嵌高德地图导航组件时,导航没有声音(首次启动app没有导航声音,再次启动app有导航声音)
目录:
1.排查
2.推测
3.验证
4.解决问题探寻中
5.问题水落石出
1.排查
方式一(排查过程)
#内置语音 V5.6.0之后
-keep class com.alibaba.idst.nls.** {*;}
#-keep class com.google.**{*;}
-keep class com.nlspeech.nlscodec.** {*;}
-keep public class com.alibaba.mit.alitts.*{*;}
#(3D导航--end)
1、通过 “flutter build apk”打包的.apk文件安装后,发现没有导航声音(无声音)
2、通过“开发工具”通过“USB”连接“手机”安装后,发现没有导航声音(无声音)
方式二(排查过程)
#内置语音 V5.6.0之后
-keep class com.alibaba.idst.nls.** {*;}
-keep class com.google.**{*;}
-keep class com.nlspeech.nlscodec.** {*;}
-keep public class com.alibaba.mit.alitts.*{*;}
#(3D导航--end)
1、通过 “flutter build apk”打包的.apk文件安装后,发现没有导航声音(无声音)
2、通过“开发工具”通过“USB”连接“手机”安装后,发现没有导航声音 (无声音,就在把“USB”数据线从手机拔掉后,再重试一下,发现【有声音】,OMG,有声音)
3、通过“android studio -> build -> generate signed apk -> release” 打包成.apk文件安装后,发现没有导航声音(首次打开进行导航,发现导航无导航声音;重新打开app,再次进入app导航进行导航时,发现有声音,【有声音】,OMG,有声音)
方式三(排查过程)
#内置语音 V5.6.0之后
-keep class com.alibaba.idst.nls.** {*;}
-keep class com.google.**{*;}
-keep class com.nlspeech.nlscodec.** {*;}
-keep public class com.alibaba.mit.alitts.*{*;}
#(3D导航--end)
1、通过 “flutter build apk”打包的.apk文件安装后,发现没有导航声音,退出app,重新启动app后,发现有声音
2、通过“开发工具”通过“USB”连接“手机”安装后,发现没有导航声音 ,退出app,重新启动app后,发现有声音
3、通过“android studio -> build -> generate signed apk -> release” 打包成.apk文件安装后,发现没有导航声音,退出app,重新启动app后,发现有声音
2.推测:
推测是由于导航语音需要下载语音包才会有语音导航。
首次进入导航页面时没有导航语音包,会先下载语音包,再次进入后会使用下载好的语音包。此时语音导航就是正常使用
3.验证:
上述【推测】的内容有些不够准确。
准确点说是:首次进入app,进行导航,发现没有声音,之后推出App,并且将app从后台退出(滑动删除/杀死app);再次启动app,然后进入导航页面,执行导航操作,导航声音正常使用。
4.解决问题探寻中
......
5.问题水落石出
1、在“动态申请权限”模块
2、描述:高德地图团队提供的导航组件需要动态请求权限,而高德地图申请权限的地方是在进入到导航页面才开始申请相关的权限,当用户授权后,开启导航时是没有导航的声音的,通过log日志查看得出是,获取导航语音资源时出现
java.lang.NullPointerException: Attempt to invoke virtual method 'int com.alibaba.mit.alitts.AliTts.startTts
上述的语音导航没有语音播报,极有可能是存储/获取语音资源出现问题导致的。而在进入导航页面授权导航相关权限后,再次重启app,再去导航页面执行导航操作时,此时导航可以正常播报语音(此时由于用户已经授权过了,重启app后,相关服务重新创建,使用正常)。
3、解决
在“高德地图团队”提供的“高德地图导航组件”页面会有“动态申请权限”,我们需要在用户进入导航组件页面前,就要把“导航所需的权限”提前给申请,当所有权限用户授权后再进入“导航组件模块”中,进行导航,此时语音播放正常,上述问题解决。