这两天做一个android的天气预报项目,要通过定位拿到所在城市。准备通过百度sdk来获取,研究了一下写了个小例子成功完成需求, 这里记录下简单步骤以供日后参考。
1. 首先当然然是下载百度sdk. 官网下载最新版本4.2: 百度定位sdk4.2
2. 然后开始在项目使用之前,还必须先在百度lbs开放平台上登陆自己的账号(没有就注册一个)并创建一个服务密钥。至于怎么创建,请看官网说明书--点我
3. 创建好密钥之后就可以开始在项目上开工了(没有的话就新建一个空项目, 或者直接下载下面的示例项目)。首先导入你下载的sdk文件,分两步:
1) 将liblocSDK4.so文件拷贝到libs/armeabi目录下
2) 将locSDK4.2.jar文件拷贝到工程的libs目录下, 并添加到build path
4. 然后是使用百度定位sdk所需要的配置:
1) 配置service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
2) 配置权限
<!-- 这个权限用于进行网络定位-->
<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>
5. 配置百度服务AccessKey, 就是前面第2步中生成的key。
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="key" />//key:开发者申请的key
6. 实现一个位置信息监听器,后面通过百度定位服务得到的位置信息会在这里进行处理。
public class MyLocationListener implements BDLocationListener {
<span style="white-space:pre"> </span>@Override
public void onReceiveLocation(BDLocation location) {
if (location == null)
return ;
// 获取时间
String time = location.getTime();
// 获取经纬度
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// 获取位置信息描述
String addrStr = location.getAddrStr();
// 获取所在省,城市
String province = location.getProvince();
String city = location.getCity();
}
}
7. 在要进行定位的Activity中初始化并配置一个LocationClient, 然后调用start方法启动client, 再用requestLocation方法发送位置信息请求。这里发出去的位置请求是异步的,返回的请求结果会由我们前面设置的监听器进行处理。最后再得到位置处息后根据需要考虑是否调用stop方法停止LocationClient。
mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类
mLocationClient.registerLocationListener( myListener ); //注册监听函数
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Battery_Saving);//设置定位模式
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true);//返回的定位结果包含地址信息
mLocationClient.setLocOption(option);
mLocationClient.start();
int result = mLocationClient.requestLocation();
通过以上几步基本上就能完成位置信息的获取,根据自己的需要将代码实现在要获取位雷信息的地方。下面附上一个最简单的例子供参考:示例代码