Android studio 百度地圖開發(10)語音播報的問題:能正常導航,但是無法語音播報

來源:互聯網
上載者:User

標籤:

一.前言

第一次做導航時,並沒有關注語音播報,今天特意把這個功能完善一下。但是發現關於語音播報的實現也遇到了一些問題,在官方的討論區也發現關於語音播報的問題特別多,問題基本都是:能正常導航,但是無法語音播報。於是把自己的一些理解和解決方案記錄一下,希望能協助到其他有問題的朋友。

二.需要做的事情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)語音播報的問題:能正常導航,但是無法語音播報

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.