Android基于位置的服务LBS笔记

Android基于位置的服务LBS笔记

LBS简介

定位通常有两种技术方式:1、GPS定位(仅室外,卫星定位);2、网络定位(室内外,三基站测速)

申请API Key

要使用百度的LBS功能,首先必须申请一个API Key:

  1. 打开http://developer.baidu.com/user/reg填写信息;
  2. 访问http://lbsyun.baidu.com/apiconsole/key同意协议,创建应用;
  3. 应用名称:随意,应用类型:Android SDK,签名文件的SHA1指纹:暂用Android Studio 右侧工具栏Gradle→项目名→:app→Tasks→android→signingReport,双击后查看Gandle Console;包名必须和应用名一致,否则出现问题 定位SDK中可能出现第一次定位成功,后续均返回505错误?
  4. 访问应用(AK=API Key);

使用百度定位

  • 准备LBS SDK
  1. 访问http://lbsyun.baidu.com/index.php,在开发文档中,下载所需SDK包
  2. SDK包/libs中,BaiduLBS_Android.jar是Java层要用,将其复制到app/libs
  3. SDK包/libs中其他子目录,Native层要用,将其复制到src/main/jniLibs(自建)
  4. 点击Sync按钮
  • AndroidManifest.xml设置
  1. 声明权限
<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" />
  1. <application>中添加<meta-data>
<meta-data
		android:name="com.baidu.lbsapi.API_KEY"
		android:value="申请的API key值" />
  1. 注册LBS SDK服务
<service 
	android="com.baidu.location.f"
	android:enabled="true"
	android:pocess=":remote">
</service>
  • 代码编写
  1. 新建LocationClient对象
//传入全局Context对象
mLocationClient = new LocationClient(getApplicationContext());
  1. 注册定位监听器
//MyLocationListener类
//继承BDAbstractLocationListener
//并重写onReceiveLocation()方法
mLacationClient.registerLocationListener(new MyLocationListener());
  1. 获取运行时权限
    需运行时获取ACCESS_FINE_LOCATIONREAD_PHONE_STATEWRITE_EXTERNAL_STORAGE三个权限
    Android运行时一次申请多个权限

  2. 设置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);
  1. 开始定位
mLocationClient.start();
  1. 回调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("网络");
}
  1. 停止定位
protected void onDestroy(){
	super.onDestroy();
	//活动被销毁时,停止定位,否则程序会后台不停定位
	mLocationClient.stop();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值