今天是2015年12月20日 礼拜天 加班
把之前的高德地图模块 修改成百度地图模块.来到了导航模块.....看了下DEMO 学习了下. 然后自己已经改完..现在复习一下..整个过程
首先.看做完后的项目图
-------------------------------在开发过程中. 有2个很坑爹的问题. 肯定让广大的 开发者也遇到过
1.是关于KEY的问题 不然你的导航 是没有语音的
这里面需要注册2个地方
.第一个是
http://lbsyun.baidu.com/apiconsole/key在这个里面注册
注册完了后. 别急 还没玩...你会得到一个AK
拿这个AK 到下面这个网址里面
http://app.navi.baidu.com/ttsregister/appinfo 这个网址里面
注意AK 是上面的那个AK .包名是你代码里面的包名 签名 则是前面图片的MD5 这个是一定要写的 不然你的导航 是没有语音的
2.关于你把DEMO 移植到项目中 为什么会说 百度导航引擎初始化失败
其实这个问题比较蛋疼
我也碰到同样的问题了,经过反复修改,总算也解决了(我的情况是导航初始化返回fail,key校验成功).解决方法如下,将demo的assets文件夹下的BaiduNaviSDK_Resource_v1_0_0png,channel文件拷贝到自己的工程就可以了..顺便鄙视有些,呵呵,.解决了就哈哈,方法也不贴出来
好了下面就贴代码吧.....
基本过程:首先确定需要导航的起点、终点,
我将通过下面的讲解,教大家一步一步如何去调用百度地图客户端的导航功能。
第一步,创建Android工程,导入百度地图开发包,在AndroidManifest.xml中添加各种权限,具体介绍请参考:
百度SDK for Android【Demo地图展示】中的第一步和第二步操作;
<meta-data
android:name="BaiduMobAd_STAT_ID"
android:value="48ae76de3f" />
<meta-data android:name="com.baidu.lbsapi.API_KEY"
android:value="4g2mMqQffyegQd6XD516GDwG" />
<activity
android:name="com.baidu.navi.sdkdemo.BNDemoMainActivity"
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
android:label="@string/sdk_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.baidu.navi.sdkdemo.RouteGuideDemo"
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
android:label="@string/title_route_guide_demo" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.BAIDUNAVISDK_DEMO" />
</intent-filter>
</activity>
<activity
android:name="com.baidu.navi.sdkdemo.BNDemoGuideActivity"
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
android:label="@string/title_route_guide_demo" >
</activity>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" />
</application>
第二步, 代码如下:
public class BNDemoMainActivity extends Activity {
public static List<Activity> activityList = new LinkedList<Activity>();
private static final String APP_FOLDER_NAME = "BNSDKSimpleDemo";
private Button mDb06ll = null;
private String mSDCardPath = null;
public static final String ROUTE_PLAN_NODE = "routePlanNode";
public static final String SHOW_CUSTOM_ITEM = "showCustomItem";
public static final String RESET_END_NODE = "resetEndNode";
public static final String VOID_MODE = "voidMode";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
activityList.add(this);
setContentView(R.layout.activity_main);
mDb06ll = (Button) findViewById(R.id.mDb06llNaviBtn);
initListener();
if (initDirs()) {
initNavi();
}
}
@Override
protected void onResume() {
super.onResume();
}
private void initListener() {
if (mDb06ll != null) {
mDb06ll.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if (BaiduNaviManager.isNaviInited()) {
routeplanToNavi(CoordinateType.BD09LL);
}
}
});
}
}
private boolean initDirs() {
mSDCardPath = getSdcardDir();
if (mSDCardPath == null) {
return false;
}
File f = new File(mSDCardPath, APP_FOLDER_NAME);
if (!f.exists()) {
try {
f.mkdir();
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
return true;
}
String authinfo = null;
private void initNavi() {
// BaiduNaviManager.getInstance().setNativeLibraryPath(mSDCardPath +
// "/BaiduNaviSDK_SO");
BNOuterTTSPlayerCallback ttsCallback = null;
BaiduNaviManager.getInstance().init(this, mSDCardPath, APP_FOLDER_NAME, new NaviInitListener() {
@Override
public void onAuthResult(int status, String msg) {
if (0 == status) {
authinfo = "key校验成功!";
} else {
authinfo = "key校验失败, " + msg;
}
BNDemoMainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(BNDemoMainActivity.this, authinfo, Toast.LENGTH_LONG).show();
}
});
}
public void initSuccess() {
Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化成功", Toast.LENGTH_SHORT).show();
}
public void initStart() {
Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化开始", Toast.LENGTH_SHORT).show();
}
public void initFailed() {
Toast.makeText(BNDemoMainActivity.this, "百度导航引擎初始化失败", Toast.LENGTH_SHORT).show();
}
}, null/* null mTTSCallback */);
}
private String getSdcardDir() {
if (Environment.getExternalStorageState().equalsIgnoreCase(Environment.MEDIA_MOUNTED)) {
return Environment.getExternalStorageDirectory().toString();
}
return null;
}
private void routeplanToNavi(CoordinateType coType) {
BNRoutePlanNode sNode = null;
BNRoutePlanNode eNode = null;
switch (coType) {
case BD09LL: {
sNode = new BNRoutePlanNode(116.30784537597782, 40.057009624099436, "百度大厦", null, coType);
eNode = new BNRoutePlanNode(116.40386525193937, 39.915160800132085, "北京天安门", null, coType);
break;
}
default:
;
}
if (sNode != null && eNode != null) {
List<BNRoutePlanNode> list = new ArrayList<BNRoutePlanNode>();
list.add(sNode);
list.add(eNode);
BaiduNaviManager.getInstance().launchNavigator(this, list, 1, true, new DemoRoutePlanListener(sNode));
}
}
public class DemoRoutePlanListener implements RoutePlanListener {
private BNRoutePlanNode mBNRoutePlanNode = null;
public DemoRoutePlanListener(BNRoutePlanNode node) {
mBNRoutePlanNode = node;
}
@Override
public void onJumpToNavigator() {
/*
* 设置途径点以及resetEndNode会回调该接口
*/
for (Activity ac : activityList) {
if (ac.getClass().getName().endsWith("BNDemoGuideActivity")) {
return;
}
}
Intent intent = new Intent(BNDemoMainActivity.this, BNDemoGuideActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable(ROUTE_PLAN_NODE, (BNRoutePlanNode) mBNRoutePlanNode);
intent.putExtras(bundle);
startActivity(intent);
}
@Override
public void onRoutePlanFailed() {
// TODO Auto-generated method stub
Toast.makeText(BNDemoMainActivity.this, "算路失败", Toast.LENGTH_SHORT).show();
}
}
private BNOuterTTSPlayerCallback mTTSCallback = new BNOuterTTSPlayerCallback() {
@Override
public void stopTTS() {
// TODO Auto-generated method stub
Log.e("test_TTS", "stopTTS");
}
@Override
public void resumeTTS() {
// TODO Auto-generated method stub
Log.e("test_TTS", "resumeTTS");
}
@Override
public void releaseTTSPlayer() {
// TODO Auto-generated method stub
Log.e("test_TTS", "releaseTTSPlayer");
}
@Override
public int playTTSText(String speech, int bPreempt) {
// TODO Auto-generated method stub
Log.e("test_TTS", "playTTSText" + "_" + speech + "_" + bPreempt);
return 1;
}
@Override
public void phoneHangUp() {
// TODO Auto-generated method stub
Log.e("test_TTS", "phoneHangUp");
}
@Override
public void phoneCalling() {
// TODO Auto-generated method stub
Log.e("test_TTS", "phoneCalling");
}
@Override
public void pauseTTS() {
// TODO Auto-generated method stub
Log.e("test_TTS", "pauseTTS");
}
@Override
public void initTTSPlayer() {
// TODO Auto-generated method stub
Log.e("test_TTS", "initTTSPlayer");
}
@Override
public int getTTSState() {
// TODO Auto-generated method stub
Log.e("test_TTS", "getTTSState");
return 1;
}
};
}