引言:
本菜菜发现好多关于百度地图开发的文章都写得不够具体, 至少我是不可避免的进了好几个坑,遂总结后写了这篇博客,尽我所能详言之,为后来人填坑。
本篇是对安卓应用内百度地图开发基础实现的详细介绍,想了解复杂功能的可以先撤了。
一、下载开发包
地址:http://lbsyun.baidu/index.php?title=androidsdk/sdkandev-download
选择你想要的功能,下载后解压
注意事项:有的选项无法正常解压,会提示压缩包损坏,没关系,这不是你的问题,换一下选项试试或者下载默认的选项。
二、新建项目
查看项目SHA1:点击Window--〉Preferences--〉Android--〉Build--〉你就看到了,好长一串
查看项目包名:查看manifest文件 --〉<manifest................. package="你的包名"........................ > </manifest>
三、获取密钥(即AK)
地址:http://lbsyun.baidu/index.php?title=androidsdk/sdkandev-download
点击获取密钥>>后新建应用,按要求填写项目SHA1和包名,提交后即可获得密钥
四、配置、混淆
1、配置
把开发包里的armeabi文件夹(里面是so文件)和BaiduLBS_Android.jar文件复制到libs文件夹下(so文件和jar文件要尽量用同一版本的)。
在工程属性->Java Build Path->Libraries中选择“Add External JARs”,选定BaiduLBS_Android.jar,确定后返回。
clean --〉Build后您就可以正常使用了。还不行的话就重启一下开发环境(针对像我一样电脑卡的人)。
最后效果大概就是这样:(本人不能截图,网图与实际内容有差异,将就着看吧,armeabi文件夹下可能不止一个文件)
2、混淆
集成地图SDK的应用,在打包混淆的时候,需要注意与地图SDK相关的方法不可被混淆。
混淆方法:在项目的根目录下的proguard_project.txt文件中添加如下所示:
#-keep class com.baidu.** {*;}
#-keep class vi.** {*;}
#-dontwarn com.baidu.**
注意:保证百度类不能被混淆,否则会出现网络不可用等运行时异常。
另:第二句有争议,有人用 #-keep class mapsdkvi.** {*;} 才管用 。
五、实现
新建你自己的Application(爱叫啥叫啥,百度文档就叫DemoApplication),如下所示(copy就行):
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
DemoApplication建好了,用在manifest文件里(注意你新建DemoApplication的路径),同时把你的密钥添加进去,如下所示:
<application
android:name="com.example.DemoApplication"
......
......
>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="**你获得的密钥粘贴进来**" />
</application>
在manifest文件添加权限(加在application外面):
<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" />
//获取设备的网络状态,鉴权所需网络代理
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//允许sd卡写权限,需写入地图数据,禁用后无法显示地图
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
//获取统计数据
<uses-permission android:name="android.permission.CAMERA" />
//使用步行AR导航,配置Camera权限
在布局xml文件中添加地图控件:
<com.baidu.mapapi.map.MapView
android:id="@+id/imap"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
创建地图,并管理生命周期:
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.imap);
}
@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();
}
}
六、你以为的结束?
本篇到这里就结束了<*开心*>,不出意外的话可以显示了,应该是没有漏掉哪一步......
毕竟篇幅太长了,漏掉了的话欢迎小伙伴们帮忙查漏补缺
更多推荐
最简单的百度地图api安卓编程详解(Eclipse)
发布评论