在iteye上已经有很久一段时间没有更新博客了,希望能把这半年内做Android开发的一些经验分享给大家。也作为抛砖引玉吧。
此项目是我的毕业设计 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设置为启动项
这样此程序就可以在你的手机上跑起来了