Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报
Posted 生活没有if-else
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报相关的知识,希望对你有一定的参考价值。
一.前言
第一次做导航时,并没有关注语音播报,今天特意把这个功能完善一下。但是发现关于语音播报的实现也遇到了一些问题,在官方的讨论区也发现关于语音播报的问题特别多,问题基本都是:能正常导航,但是无法语音播报。于是把自己的一些理解和解决方法记录一下,希望能帮助到其他有问题的朋友。
二.需要做的事情
1.配置问题
除了地图显示、定位、导航需要的配置之外,tts播报需要添加白名单,点击前往。如下所示:
这里有关键地方必须留意:
- 应用包名:这个基本没问题
应用签名:这个签名不是申请AK时的SHA1,而是打包成apk后的MD5,获取MD5的方式有两种:
(1)第一种:将apk的文件格式修改为.rar,即压缩包,然后解压,在META-INF文件夹下会有一个CERT.RSA文件,然后命令窗口进入到META-INF,输入keytool -printcert -file CERT.RSA
(2)第二种:打包的时候会生成一个 自命名.jks文件,打包过程请点击查看,最主要的就是这个jks文件。然后在命令窗口进入到这个jks文件的目录,输入keytool -list -v -keystore 自命名.jks,于是就可以看到MD5。
AK:就是之前申请的AK,这个没问题。
2.相关代码
这两部分在官方Demo里就有
1.内部TTS播报状态回传handler
private Handler ttsHandler = new Handler() {
public void handleMessage(Message msg) {
int type = msg.what;
switch (type) {
//tts播报开始
case BaiduNaviManager.TTSPlayMsgType.PLAY_START_MSG: {
//showToastMsg("Handler : TTS play start");
break;
}
//tts播报结束
case BaiduNaviManager.TTSPlayMsgType.PLAY_END_MSG: {
//showToastMsg("Handler : TTS play end");
break;
}
default :
break;
}
}
};
2.服务授权和初始化
private void initNavi() {
BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new BaiduNaviManager.NaviInitListener() {
@Override
public void onAuthResult(int status, String msg) {
String authinfo;
if (0 == status) {
authinfo = "key校验成功!";
} else {
authinfo = "key校验失败, " + msg;
}
DriveRouteActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {}});
}
public void initSuccess() {
initSetting();
}
public void initStart() {}
public void initFailed() {}},
ttsHandler,//前面定义过的tts播报回传handler
null);
}
3.进入导航
BaiduNaviManager
.getInstance()
.launchNavigator(
DriveRouteActivity.this, //建议是应用的主Activity
list, //传入的算路节点,顺序是起点、途经点、终点,其中途经点最多三个
2, //算路偏好 1:推荐 8:少收费 2:高速优先 4:少走高速 16:躲避拥堵
true, //true表示真实GPS导航,false表示模拟导航,据我所知,新的SDK中,模拟导航不支持语音播报
new DemoRoutePlanListener(sPNode)//开始导航回调监听器,在该监听器里一般是进入导航过程页面
);
三.为什么能导航但是不能语音播报
理论上,通过配置工作和上面的三部分代码就可以搞定语音播报的功能了。但是往往在细节上错误,会导致能征程导航但是无法语音播报,以下是我的一些理解和方案,仅供参考,大家可以从这些方面去排查错误。
(1)tts白名单的签名来自于apk,所以在开发阶段应该是不能语音播报的,因为开发阶段的签名和打包后的签名不一致;至少我个人的问题是这样,开发阶段是不能语音播报的,将apk安装到手机后就可以正常语音播报了;
(2)使用比较新的SDK,模拟导航不支持语音播报;
以上是关于Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报的主要内容,如果未能解决你的问题,请参考以下文章
Android studio 百度地图开发查询周边服务(加油站)
Android studio 百度地图开发之2022地图显示与定位