-
在android开发中经常会使用到地图服务,下面简易的介绍下,android下百度地图的基本开发流程,写的不好的地方请大神们多多指教.
第一步:创建好项目
- 创建好自己项目,项目的包名要记下来,例如我的包名就是:cn.baidumap.mymap 第二步:申请一个key值
-
网址是:
http://developer.baidu.com/map/android-mobile-apply-key.htm
申请key需要应用程序的包名和数字签名(SHA1);
包名第一步已经得到了,
SHA1值的获取办法:
1.打开命令行输入cd .android 进入到android签名目录 如:C:\Users\lenovo.android
2.输入命名: “C:\Program Files\Java\jdk1.6.0_45\bin\keytool.exe”(前面是jdk的安装目录中的keytool.exe) -list -v -keystore debug.keystore 密码是android
3.最后生成的内容为:
第三步:添加地图引擎到Andoid工程中
-
找到需要的jar包,然后导入到项目的libs下;
注意:如果用虚拟机运行的话只能在CPU为arm上运行X86的运行不起来;
第四步:在清单文件(AndroidManifest.xml)中配置key信息
- 在application下添加
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="在第二步生成的key" />`
-
第五步:需要添加的权限
-
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<!--允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
第六步:在布局中显示地图控件
-
<com.baidu.mapapi.map.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
第七步:在activity代码中,首先要初始化地图引擎 效验KEY;
-
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化地图和效验key及网络连接状态;
initSDK();
setContentView(R.layout.common);
init();
}
/**
* 初始化地图和效验key及网络连接状态;
*/
private void initSDK() {
// 初始化地图引擎 效验KEY;
// 注意这里传入的参数需要是一个全局的上下文;
SDKInitializer.initialize(getApplicationContext());
//初始化地图引擎 效验KEY后开启一个广播接收者,接收定义的广播消息;
IntentFilter filter = new IntentFilter();
filter.addAction("SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR");
filter.addAction("SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR");
registerReceiver(new SDKBroadCast(), filter);
}
/**
* 定义一个广播接受者,用来接收验证KEY是否验证成功和网络连接情况;
*/
private class SDKBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR")) {
//网络错误的广播
Log.i(TAG, "网络连接错误的广播");
Toast.makeText(getApplicationContext(), "网络连接错误", 0).show();
} else if(action.equals("SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR")) {
//key 验证失败的广播
Log.i(TAG, "key 验证失败的广播");
Toast.makeText(getApplicationContext(), "key 验证失败", 0).show();
}
}
}
-
第七步:把MapView的声明周期和Activity的声明周期绑定在一起;
- 在onCreate方法中:找到MapView;
MapView mapView = (MapView) findViewById(R.id.mapview);
然后用activity的声明周期来管理地图的声明周期;在activity的onResume、onPause、onDestory方法中分别执行mapview的onReusme、onPause、onDestory方法。
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onDestroy() {
mapView.onDestroy();
super.onDestroy();
}
完成以上的步骤,一个简单的百度地图程序就做好了.