百度地图语音不了,提示ios 获取麦克风权限限被占用

7336人阅读
【移动开发】(32)
第一次做导航时,并没有关注语音播报,今天特意把这个功能完善一下。但是发现关于语音播报的实现也遇到了一些问题,在官方的讨论区也发现关于语音播报的问题特别多,问题基本都是:能正常导航,但是无法语音播报。于是把自己的一些理解和解决方法记录一下,希望能帮助到其他有问题的朋友。
二.需要做的事情
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.
switch (type) {
case BaiduNaviManager.TTSPlayMsgType.PLAY_START_MSG: {
case BaiduNaviManager.TTSPlayMsgType.PLAY_END_MSG: {
2.服务授权和初始化
private void initNavi() {
BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new BaiduNaviManager.NaviInitListener() {
public void onAuthResult(int status, String msg) {
if (0 == status) {
authinfo = "key校验成功!";
authinfo = "key校验失败, " +
DriveRouteActivity.this.runOnUiThread(new Runnable() {
public void run() {}});
public void initSuccess() {
initSetting();
public void initStart() {}
public void initFailed() {}},
ttsHandler,
3.进入导航
BaiduNaviManager
.getInstance()
.launchNavigator(
DriveRouteActivity.this,
new DemoRoutePlanListener(sPNode)
三.为什么能导航但是不能语音播报
理论上,通过配置工作和上面的三部分代码就可以搞定语音播报的功能了。但是往往在细节上错误,会导致能征程导航但是无法语音播报,以下是我的一些理解和方案,仅供参考,大家可以从这些方面去排查错误。
(1)tts白名单的签名来自于apk,所以在开发阶段应该是不能语音播报的,因为开发阶段的签名和打包后的签名不一致;至少我个人的问题是这样,开发阶段是不能语音播报的,将apk安装到手机后就可以正常语音播报了;
(2)使用比较新的SDK,模拟导航不支持语音播报;
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:307843次
积分:4346
积分:4346
排名:第7054名
原创:122篇
评论:150条
文章:32篇
阅读:122068
文章:17篇
阅读:29170
文章:29篇
阅读:67776
(1)(3)(1)(3)(7)(1)(3)(3)(1)(13)(9)(6)(2)(4)(7)(5)(3)(5)(5)(1)(3)(13)(9)(4)(4)(7)(1)(1)(2)}

我要回帖

更多关于 tt语音麦克风被占用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信