LBS简介
定位通常有两种技术方式:1、GPS定位(仅室外,卫星定位);2、网络定位(室内外,三基站测速)
申请API Key
要使用百度的LBS功能,首先必须申请一个API Key:
- 打开http://developer.baidu.com/user/reg填写信息;
- 访问http://lbsyun.baidu.com/apiconsole/key同意协议,创建应用;
- 应用名称:随意,应用类型:Android SDK,签名文件的SHA1指纹:暂用Android Studio 右侧工具栏Gradle→项目名→:app→Tasks→android→signingReport,双击后查看Gandle Console;包名必须和应用名一致,否则出现问题 定位SDK中可能出现第一次定位成功,后续均返回505错误?
- 访问应用(AK=API Key);
使用百度定位
- 准备LBS SDK
- 访问http://lbsyun.baidu.com/index.php,在开发文档中,下载所需SDK包
- SDK包/libs中,BaiduLBS_Android.jar是Java层要用,将其复制到app/libs
- SDK包/libs中其他子目录,Native层要用,将其复制到src/main/jniLibs(自建)
- 点击Sync按钮
- AndroidManifest.xml设置
- 声明权限
<uses-permission android:name="android.permission.ACCESS_CORSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
- <application>中添加<meta-data>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的API key值" />
- 注册LBS SDK服务
<service
android="com.baidu.location.f"
android:enabled="true"
android:pocess=":remote">
</service>
- 代码编写
- 新建LocationClient对象
//传入全局Context对象
mLocationClient = new LocationClient(getApplicationContext());
- 注册定位监听器
//MyLocationListener类
//继承BDAbstractLocationListener
//并重写onReceiveLocation()方法
mLacationClient.registerLocationListener(new MyLocationListener());
-
获取运行时权限
需运行时获取ACCESS_FINE_LOCATION、READ_PHONE_STATE、WRITE_EXTERNAL_STORAGE三个权限
Android运行时一次申请多个权限 -
设置LocationClientOption选项
LocationClientOption option = new LocationClientOption();
//设置更新间隔
option.setScanSpan(5000);
//设置定位模式,3种模式可选
//Hight_Accuracy:默认模式,GPS信号正常时优先GPS定位,否则网络定位
//Battery_Saving:节电模式,只使用网络定位
//Device_Sensors:传感器模式,只使用GPS定位
option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);
//获取详细地址信息
option.setIsNeedAddress(true);
mLocationClient.setLocOption(option);
- 开始定位
mLocationClient.start();
- 回调onReceiveLocation(BDLocation location)方法
StringBuilder currentPosition = new StringBuilder();
//获取经纬度
currentPosition.append("纬度:").append(location.getLatitude()).append("\n");
currentPosition.append("经度:").append(location.getLongitude()).append("\n");
//获取详细地址
currentPosition.append("国家:").append(location.getCountry()).append("\n");
currentPosition.append("省:").append(location.getProvince()).append("\n");
currentPosition.append("市:").append(location.getCity()).append("\n");
currentPosition.append("区:").append(location.getDistrict()).append("\n");
currentPosition.append("街道:").append(location.getStreet()).append("\n");
//获取详细地址信息一定需要网络
//因此即便定位模式指定为Device_Sensors
//也会自动开启网络定位功能
currentPosition.append("定位方式:");
if(location.getLocType()==BDLocation.TypeGpsLocation){
currentPosition.append("GPS");
}else if(location.getLocType()==BDLocation.TypeNetWorkLocation){
currentPosition.append("网络");
}
- 停止定位
protected void onDestroy(){
super.onDestroy();
//活动被销毁时,停止定位,否则程序会后台不停定位
mLocationClient.stop();
}