官方文檔:http://lbsyun.baidu.com/index.php?title=android-navsdk
1.簡介
百度Android 導航SDK是一套基於Android 2.1及以上版本設備的應用程序接口,您可以通過該接口實現專業的導航功能:
語音播報:SDK集成了TTS模塊,TTS模塊播報相應的誘導語音,暫時支持中文。
自定義圖層:開發者可以自定義圖層。
路線規劃及導航:通過輸入起點,終點,(途經點),可以發起路線規劃,規劃成功後即自動進入導航。支持GPS導航、模擬導航、文字導航和HUD導航。
2.創建測試語音導航項目
1)AndroidManifest.xml
增加權限,聲明service和ak鑑權
<uses-permission android:name="android.permission.BODY_SENSORS"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 來電消音 -->
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 攝影機 -->
<uses-permission android:name="android.permission.CAMERA" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data
android:name="BaiduMobAd_STAT_ID"
android:value="48ae76de3f" />
<meta-data android:name="com.baidu.lbsapi.API_KEY"
android:value="bAZLoLtUxVPWs6fpnRBLOY8yFHjKu0jE" />
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />
2)導入項目所需的jar包和so
把jar包放入lib目錄下
BaiduNaviSDK_3.3.1.jar
galaxy_lite_lbs_v2.0.jar
httpmime-4.1.2.jar
lbsCoreSDK.jar
把armeabi目錄下的所有so放到libs/armeabi下
在build.gradle android{}中加入
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
把assets目錄下的所有資源文件放到app/src/main/assets目錄下
3)初始化
在使用SDK前,應該先進行百度服務授權和引擎初始化
BaiduNaviManager.getInstance().init(this,
Environment.getExternalStorageDirectory().toString(),
"BNSDKSimpleDemo",
new BaiduNaviManager.NaviInitListener() {
@Override
public void onAuthResult(int status, String msg) {
if (0 == status) {
authinfo = "key校驗成功!";
} else {
authinfo = "key校驗失敗, " + msg;
}
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, authinfo, Toast.LENGTH_LONG).show();
}
});
}
public void initSuccess() {
Toast.makeText(MainActivity.this, "百度導航引擎初始化成功", Toast.LENGTH_SHORT).show();
initSetting();
}
public void initStart() {
Toast.makeText(MainActivity.this, "百度導航引擎初始化開始", Toast.LENGTH_SHORT).show();
}
public void initFailed() {
Toast.makeText(MainActivity.this, "百度導航引擎初始化失敗", Toast.LENGTH_SHORT).show();
}
}, null, ttsHandler, ttsPlayStateListener);
private void initSetting() {
BNaviSettingManager
.setShowTotalRoadConditionBar(BNaviSettingManager.PreViewRoadCondition.ROAD_CONDITION_BAR_SHOW_ON);
BNaviSettingManager.setVoiceMode(BNaviSettingManager.VoiceMode.Veteran);
// BNaviSettingManager.setPowerSaveMode(BNaviSettingManager.PowerSaveMode.DISABLE_MODE);
BNaviSettingManager.setRealRoadCondition(BNaviSettingManager.RealRoadCondition.NAVI_ITS_ON);
BNaviSettingManager.setIsAutoQuitWhenArrived(true);
Bundle bundle = new Bundle();
// 必須設置APPID,否則會靜音
bundle.putString(BNCommonSettingParam.TTS_APP_ID, "10693742");
BNaviSettingManager.setNaviSdkParam(bundle);
}
3.APPID的申請
http://yuyin.baidu.com/app創建自己的應用,註冊語音合成功能
一開始犯了一個錯,把申請ak的appid填入應用結果沒有聲音
應該重新創建應用,開通語音功能綁定包名即可
// 必須設置APPID,否則會靜音
bundle.putString(BNCommonSettingParam.TTS_APP_ID, "10693742");
BNaviSettingManager.setNaviSdkParam(bundle);
5.路徑規劃和導航
通過輸入起點,終點或途經點,可以發起路線規劃,並進入導航
發起算路
算路設置起、終點,算路偏好,是否模擬導航等參數,然後在回調函數中設置跳轉至誘導
private void routeplanToNavi(BNRoutePlanNode.CoordinateType coType){
BNRoutePlanNode sNode = null;
BNRoutePlanNode eNode = null;
sNode = new BNRoutePlanNode(116.30784537597782, 40.057009624099436, "百度大廈", null, coType);
eNode = new BNRoutePlanNode(116.40386525193937, 39.915160800132085, "北京天安門", null, coType);
if (sNode != null && eNode != null) {
List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>();
list.add(sNode);
list.add(eNode);
// 開發者可以使用舊的算路接口,也可以使用新的算路接口,可以接收誘導信息等
BaiduNaviManager
.getInstance()
.launchNavigator(this,//應用的主Activity
list,//傳入的算路節點,順序是起點,途經點,終點,其中途經點最多三個
1, //算路偏好
true,//真實GPS導航
new DemoRoutePlanListener(sNode),//開始導航回調監聽,進入導航頁面
eventListerner);
}
}