BaiduMap开发详解(1) 申请key
此项目是我的毕业设计 GPS旅游自助导游系统。采用的是BaiduMap。通过整理一步步实现完整的系统。初入Android行业,高手勿喷!
目前新版的百度地图,和之前的版本有了很大差别,首先来说如何申请key吧。
具体的申请方式可以参加BaiduMap的官方网址 和pdf文档 我会上传在附件中:这里主要说说我申请之后碰到的问题和心酸历程吧!已经有了的东西不再重造车轮
首先 key的申请中要注意几个问题:我申请完了之后,发现地图是白格子,这个是经常碰到的问题:最有可能的问题还是你的key没有申请对!
申请Key的时候:key有两部分组成 安全提示码+程序的包名。安全提示码有2种途径进行查看:
1 在eclipseADT中查看 点击 window-Preference- 在左侧的树状菜单中选择 Android下的 Build 就可以看到以下的安全码 选择 SHA1 fingerprint

2 BaiduMap的Key 是由安全码再加;再加你开发的程序包名 包名的查看你可以到Android应用程序下的配置文件 AndroidManifest.xml 下查看

这样key就申请完了。
然后提交到百度api 控制台

然后不要忘记掉给应用程序的配置文件 里添加相关的网络访问权限和屏幕自适应的权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
</permission>
<uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" >
</uses-permission>
<!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WAKE_LOCK" >
</uses-permission>
<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.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.CAMERA" >
</uses-permission>
<uses-permission android:name="android.permission.RECORD_AUDIO" >
</uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<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>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />这样你就可以使用百度地图来开发自己的程序了 下面写一个demo
首先你要做一张布局页面 test.xml 在给xml页面命名的时候也不要忘记了xml页面命名是小写的
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapsView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</LinearLayout>在加载地图渲染之前 首先要加载地图管理类
地图管理类 已经放在了ApplicationDemo中 代码如下 :
public class DemoApplication extends Application {
private static DemoApplication mInstance = null;
public boolean m_bKeyRight = true;
public BMapManager mBMapManager = null;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
initEngineManager(this);
}
public void initEngineManager(Context context) {
if (mBMapManager == null) {
mBMapManager = new BMapManager(context);
}
if (!mBMapManager.init(new MyGeneralListener())) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"BMapManager 初始化错误!", Toast.LENGTH_LONG).show();
}
}
public static DemoApplication getInstance() {
return mInstance;
}
// 常用事件监听,用来处理通常的网络错误,授权验证错误等
public static class MyGeneralListener implements MKGeneralListener {
@Override
public void onGetNetworkState(int iError) {
if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "您的网络出错啦!",
Toast.LENGTH_LONG).show();
}
else if (iError == MKEvent.ERROR_NETWORK_DATA) {
Toast.makeText(DemoApplication.getInstance().getApplicationContext(), "输入正确的检索条件!",
Toast.LENGTH_LONG).show();
}
// ...
}
@Override
public void onGetPermissionState(int iError) {
//非零值表示key验证未通过
if (iError != 0) {
//授权Key错误:
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"请在 DemoApplication.java文件输入正确的授权Key,并检查您的网络连接是否正常!error: "+iError, Toast.LENGTH_LONG).show();
DemoApplication.getInstance().m_bKeyRight = false;
}
else{
DemoApplication.getInstance().m_bKeyRight = true;
Toast.makeText(DemoApplication.getInstance().getApplicationContext(),
"key认证成功", Toast.LENGTH_LONG).show();
}
}
}
}其实到了这一步 ,你还缺少一步 :要在Android的配置文件中设定启动的Activity的名字 TestBaiduMapActivity设置为启动项
这样此程序就可以在你的手机上跑起来了