有些app免不了要使用地图功能,最近自己研究了一下百度地图的使用,写一篇博客记录一下,有说的不到位的地方欢迎各位大哥指正!
一 申请API key
在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/apiconsole/key,自己自行注册一个百度账号,很快就能申请到的,如下图:
在申请可以的时候需要用到一个发布版SHA1,这个发布版SHA1的值可以通过https://download.csdn.net/download/wen_haha/10558799下载一个Apk,就不需要通过dos命令获取了,比较方便。如图所示:
数字签名搞定了,然后点击“创建应用”就ok了。创建完成之后,应用列表中会显示相应的key。
二 下载百度地图API库
要在Android应用中使用百度地图API,就需要在工程中引用百度地图API开发包,下载地址为http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download,下载Android 地图 SDK v5.1.0lib库就行,里面还包含着例子。
三在Android项目中引用百度地图
Android Studio工程配置方法
1.在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so。
如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
2.往工程中添加jar文件
工程配置还需要把jar包集成到自己的工程中,如上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。同时在build.gradle中会生成工程所依赖的对应的jar文件说明,代码如下所示:
compile files('libs/BaiduLBS_Android.jar')
3.在AndroidManifest中添加开发密钥、所需权限等信息;
(1)在application中添加开发密钥和百度定位所需要的服务
<application
android:allowBackup="true"
android:name=".MapApplication"
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="com.baidu.lbsapi.API_KEY"
android:value="EEZZhl476r39NmBxkIjGUuG10euovkXr" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 声明service组件 -->
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
</application>
(2)添加所需权限
注意: 权限应添加在 appliction 之外,如添加到appliction 内部,会导致无法访问网络,不显示地图。
//获取设备网络状态,禁用后无法获取网络状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
//网络权限,当禁用后,无法进行检索等相关业务
<uses-permission android:name="android.permission.INTERNET"/>
//读取设备硬件信息,统计数据
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
//读取系统信息,包含系统版本等信息,用作统计
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
//获取设备的网络状态,鉴权所需网络代理
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
//允许sd卡写权限,需写入地图数据,禁用后无法显示地图
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//获取统计数据
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
//鉴权所需该权限获取进程列表
<uses-permission android:name="android.permission.GET_TASKS" />
//使用步行AR导航,配置Camera权限
<uses-permission android:name="android.permission.CAMERA" />
//获取定位权限
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
(3)在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/mv_map"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.baidu.mapapi.map.MapView>
(4)在应用程序创建时初始化 SDK引用的Context 全局变量;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
注意一下:initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都不行,不然会报运行时异常,所以百度建议把该方法放到Application的初始化方法中。
(5)创建地图Activity,管理地图生命周期;在activity的onResume、onPause、onDestory方法中分别执行mapview的onReusme、onPause、onDestory方法。
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.mv_map);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
完成以上步骤,这样百度地图的基础使用就完成了,我们就可以写一个简单的使用百度地图的例子了。接下来我会对百度地图模式的切换、定位、覆盖物的添加做相关介绍,具体见Android中百度地图的使用(二)。