Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报

本文介绍了解决Android百度地图导航中语音播报功能缺失的方法。重点在于正确配置TTS白名单签名,确保开发和发布版签名一致。此外,文中还提供了必要的代码示例和调试技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android studio 百度地图开发(10)语音播报的问题:能正常导航,但是无法语音播报

标签: android studio百度地图语音播报导航
  7281人阅读  评论(2)  收藏  举报
  分类:

目录(?)[+]

一.前言

第一次做导航时,并没有关注语音播报,今天特意把这个功能完善一下。但是发现关于语音播报的实现也遇到了一些问题,在官方的讨论区也发现关于语音播报的问题特别多,问题基本都是:能正常导航,但是无法语音播报。于是把自己的一些理解和解决方法记录一下,希望能帮助到其他有问题的朋友。

二.需要做的事情

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;
            }
        }
    };
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

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);
    }
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3.进入导航

BaiduNaviManager
    .getInstance()
        .launchNavigator(
            DriveRouteActivity.this,    //建议是应用的主Activity
            list,                           //传入的算路节点,顺序是起点、途经点、终点,其中途经点最多三个
            2,                              //算路偏好 1:推荐 8:少收费 2:高速优先 4:少走高速 16:躲避拥堵
            true,                           //true表示真实GPS导航,false表示模拟导航,据我所知,新的SDK中,模拟导航不支持语音播报
            new DemoRoutePlanListener(sPNode)//开始导航回调监听器,在该监听器里一般是进入导航过程页面
            );
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三.为什么能导航但是不能语音播报

理论上,通过配置工作和上面的三部分代码就可以搞定语音播报的功能了。但是往往在细节上错误,会导致能征程导航但是无法语音播报,以下是我的一些理解和方案,仅供参考,大家可以从这些方面去排查错误。 
(1)tts白名单的签名来自于apk,所以在开发阶段应该是不能语音播报的,因为开发阶段的签名和打包后的签名不一致;至少我个人的问题是这样,开发阶段是不能语音播报的,将apk安装到手机后就可以正常语音播报了; 
(2)使用比较新的SDK,模拟导航不支持语音播报;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值