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);
}
}