从零学习Android 百度地图V3.0(一)

时间:2021-01-14 01:37:56

转载请注明出处,谢谢!http://blog.csdn.net/alantang1990


         本文记录了我在学习百度地图时的经历,供自己以后复习时参考,其中自己遇到的一些问题希望对大家有一个借鉴的作用。其中(一)主要根据官网的Demo步骤写的,内容是加载一个简单的百度地图,(二)是实现了百度地图定位的功能。

         关于Demo的上传:由于(一)较为简单,所以Demo就不上传了,在(二)中添加定位功能后一起上传

         关于调试:请使用真机调试,不要用模拟器

         开发之初我们首先得进入百度开发者网站的LBS开放平台,进入AndroidSDK地址:

                                http://developer.baidu.com/map/sdk-android.htm

         这里有百度开发的关键步骤,可以先看看,其中我遇到的一些问题我会在下文描述。

(1)首先需要申请Key,才可以使用Android SDK

     Key申请地址:http://lbsyun.baidu.com/apiconsole/key

        点击创建应用,出现

从零学习Android 百度地图V3.0(一)


    首先在1处填写应用名称,此处注意需要使用一部分汉字才可以,不然无法创建

    在2处选择for mobile

    3处需要注意的是Android安全码格式为:数字签名(即SHA1值);包名

     SHA1值的获取:Window——>Android——>Build从零学习Android 百度地图V3.0(一)

包名的获取:在你创建应用是Manifest中的Package内

在完成以上步骤后会生成一个Key值

从零学习Android 百度地图V3.0(一)


备注:此处有一个需要注意的地方,就是在我使用Key时发现当时申请的Key无法使用,需要过一段时间才能用,不知道是个案还是通例,如果使用我在(二)中Demo的话,自己申请的Key替换我的Key时出现加载不了地图时请先检查手机网络是否开通,如果还是加载不出来的话请稍等几分钟

代码的编写

工程结构

从零学习Android 百度地图V3.0(一)

    (一)自己新建工程后首先是添加百度地图的开发包,可以将我的工程中的开发包里的baidumapapi_vX_X_X.jar拷贝到libs根目录下,将libBaiduMapSDK_vX_X_X.so拷贝到libs\armeabi目录下,liblocSDK4.so和locSDK_4.0.jar为百度定位SDK所使用资源,一并拷起。

 工程右击properties->Java Build Path->Libraries中选择“Add External JARs”,选定baidumapapi_vX_X_X.jar,确定后返回。(其实还有一张方法就是右击jar包,点击Build Path中的Configure Build Path 也可)

通过以上两步操作后,您就可以正常使用百度地图SDK为您提供的全部功能了。

这里官网上给出了注意事项:

注意:由于adt插件升级,若您使用Eclipse adt 22的话,需要对开发环境进行相应的设置,方法如下:

1. 在Eclipse 中选中工程,右键选 Properties->Java Build Path->Order and Export 使 Android Private Libraries处于勾选状态;

2. Project -> clean-> clean all .

(二) application中添加Key和相关权限

在Manifest的application中添加

  <meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="FxWETAHvo8YP2i6OPMwrh8np" />

在Manifest中添加百度地图使用的权限

 <!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 允许应用读取低级别的系统日志文件 -->
<uses-permission android:name="android.permission.READ_LOGS" />
<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" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

此处我要着重说明的是:一定要在application中添加<service></service>,不然就算全部写好了也不会加载地图出来的,这是血的教训!

 <service 
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"
> </service>

(三)关于主Activity的编写

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);
}
}
下一步就要编写地图的生命周期了
public class MainActivity extends Activity {  
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.bmapView);
}
@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();
}
}