編輯:關於Android編程
第一次做導航時,並沒有關注語音播報,今天特意把這個功能完善一下。但是發現關於語音播報的實現也遇到了一些問題,在官方的討論區也發現關於語音播報的問題特別多,問題基本都是:能正常導航,但是無法語音播報。於是把自己的一些理解和解決方法記錄一下,希望能幫助到其他有問題的朋友。
除了地圖顯示、定位、導航需要的配置之外,tts播報需要添加白名單。如下所示:
這裡有關鍵地方必須留意:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCtOm08Ow/MP7o7rV4rj2u/mxvsO7zsrM4g0KPHA+06bTw8epw/ujutXiuPbHqcP7srvKx8nqx+tBS8qxtcRTSEExo6y2+MrHtPKw/LPJYXBruvO1xE1ENaOsu/HIoU1ENbXEt73KvdPQwb3W1qO6PGJyIC8+DQo8Yj6jqDGjqbXa0rvW1jq9q2Fwa7XEzsS8/rjxyr3Q3rjEzqoucmFyo6y8tNG5y/Ww/KOsyLu6873i0bmjrNTaTUVUQS1JTkbOxLz+vNDPwrvh09DSu7j2Q0VSVC5SU0HOxLz+o6zIu7rzw/zB7rSwv9q9+Mjrtb1NRVRBLUlORqOsyuTI62tleXRvb2wgLXByaW50Y2VydCAtZmlsZSBDRVJULlJTQSA8L2I+PGJyIC8+DQo8aW1nIGFsdD0="這裡寫圖片描述" src="/uploadfile/Collfiles/20160518/20160518091235155.png" title="\" />
(2)第二種:打包的時候會生成一個 自命名.jks文件,最主要的就是這個jks文件。然後在命令窗口進入到這個jks文件的目錄,輸入keytool -list -v -keystore 自命名.jks,於是就可以看到MD5。
AK:就是之前申請的AK,這個沒問題。
這兩部分在官方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,模擬導航不支持語音播報;
當我們在處理下載或是其他需要長時間執行的任務時,如果直接把處理函數放在Activity的OnCreate或是OnStart中,會導致執行過程中整個Activity無響
在一個項目中我們可能會需要用到相同的布局設計,如果都寫在一個xml文件中,代碼顯得很冗余,並且可讀性也很差,所以我們可以把相同布局的代碼單獨寫成一個模塊,然後用到的時候可
在沒給大家介紹正文之前先給大家說下實現思路:先分別實現閃屏、注冊界面、登錄界面的活動,再用Intent將相關的活動連接起來,實現不同活動之間的跳轉。此次試驗代碼較多,我只
幾個常用的方法:1.setTitle()設置對話框顯示的標題。2.setIcon()設置對話框的圖標,值得注意的是,如果沒有使用setTitle()方法,setIcon(