为什么室内没有location呢?

因为我们开发的时候几乎肯定都是在室内的,这个时候卫星你是搜索不到的,所以必然是定位不了的,所以系统如何将位置信息通知给你的程序。所以要从根本上解决这个问题,就要解决位置信息获取问题。
那么我来告诉大家,只有NETWORK_PROVIDER这种模式才是室内定位可靠的方式,就是当location为null的时候只要用这个,NETWORK_PROVIDER。
不过直接用大家也是用不了的,为啥呢,因为大部分厂商也不会用google的服务,这种定位方式默认是没法用的。那怎么办?好办,找个替代的服务商就可以了,百度或者高德的位置信息sdk就可以解决这个问题。它的基本原理在上面已经提到过了,就是搜集你的wifi节点信息和你的手机基站信息来定位。
本篇文章我们来用百度解决。
用百度位置定位SDK
SDK下载:http://lbsyun.baidu.com/sdk/download
SDK使用:
1. 申请百度的服务密钥,具体操作步骤见官网:http://api.map.baidu.com/lbsapi/cloud/geosdk.htm
2.将上面下载的sdk文件locSDK_4.1.jar拷贝到你项目的libs下
3. 修改AndroidManifest文件,在该文件里添加如下配置
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="xxxxx " /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
上面meta-data中value的值改为你自己的密钥
代码里调用sdk:
public class LocationUtil {
private final static boolean DEBUG = true;
private final static String TAG = "LocationUtil";
private static LocationUtil mInstance;
private BDLocation mLocation = null;
private MLocation mBaseLocation = new MLocation();
public static LocationUtil getInstance(Context context) {
if (mInstance == null) {
mInstance = new LocationUtil(context);
}
return mInstance;
}
Context mContext;
String mProvider;
public BDLocationListener myListener = new MyLocationListener();
private LocationClient mLocationClient;
public LocationUtil(Context context) {
mLocationClient = new LocationClient(context.getApplicationContext());
initParams();
mLocationClient.registerLocationListener(myListener);
}
public void startMonitor() {
if (DEBUG) Log.d(TAG, "start monitor location");
if (!mLocationClient.isStarted()) {
mLocationClient.start();
}
if (mLocationClient != null && mLocationClient.isStarted()) {
mLocationClient.requestLocation();
} else {
Log.d("LocSDK3", "locClient is null or not started");
}
}
public void stopMonitor() {
if (DEBUG) Log.d(TAG, "stop monitor location");
if (mLocationClient != null && mLocationClient.isStarted()) {
mLocationClient.stop();
}
}
public BDLocation getLocation() {
if (DEBUG) Log.d(TAG, "get location");
return mLocation;
}
public MLocation getBaseLocation() {
if (DEBUG) Log.d(TAG, "get location");
return mBaseLocation;
}
private void initParams() {
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
//option.setPriority(LocationClientOption.NetWorkFirst);
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息
mLocationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null) {
return ;
}
mLocation = location;
mBaseLocation.latitude = mLocation.getLatitude();
mBaseLocation.longitude = mLocation.getLongitude();
StringBuffer sb = new StringBuffer(256);
sb.append("time : ");
sb.append(location.getTime());
sb.append("\nerror code : ");
sb.append(location.getLocType());
sb.append("\nlatitude : ");
sb.append(location.getLatitude());
sb.append("\nlontitude : ");
sb.append(location.getLongitude());
sb.append("\nradius : ");
sb.append(location.getRadius());
sb.append("\ncity : ");
sb.append(location.getCity());
if (location.getLocType() == BDLocation.TypeGpsLocation){
sb.append("\nspeed : ");
sb.append(location.getSpeed());
sb.append("\nsatellite : ");
sb.append(location.getSatelliteNumber());
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
sb.append("\naddr : ");
sb.append(location.getAddrStr());
}
if (DEBUG) Log.d(TAG, "" + sb);
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
public class MLocation {
public double latitude;
public double longitude;
}
}
当然别忘了在setting里将gps定位打开。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# GPS
# 室内定位
# android studio 使用Mocklocation虚拟定位
# Android编程之PopupWindow隐藏及显示方法示例(showAtLocation
# showAsDropDown)
# Android开发之Location用法实例分析
# 用Android Location获取当前地理位置的方法
# Android Location服务之LocationManager案例详解
# 室内
# 解决这个问题
# 就可以
# 都是
# 也不
# 你是
# 过了
# 才是
# 最多
# 我来
# 你自己
# 找个
# 到你
# 这个时候
# 时间为
# 在上面
# 会用
# 别忘了
# 从根本上
# 该文件
相关文章:
建站之星导航如何优化提升用户体验?
婚礼视频制作网站,学习*后期制作的网站有哪些?
太平洋网站制作公司,网络用语太平洋是什么意思?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
教学网站制作软件,学习*后期制作的网站有哪些?
如何用PHP工具快速搭建高效网站?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
如何在建站之星网店版论坛获取技术支持?
建站主机CVM配置优化、SEO策略与性能提升指南
IOS倒计时设置UIButton标题title的抖动问题
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
岳西云建站教程与模板下载_一站式快速建站系统操作指南
建站之星CMS五站合一模板配置与SEO优化指南
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
Thinkphp 中 distinct 的用法解析
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站主机服务器选购指南:轻量应用与VPS配置解析
完全自定义免费建站平台:主题模板在线生成一站式服务
制作网站的软件免费下载,免费制作app哪个平台好?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
网站制作企业,网站的banner和导航栏是指什么?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
建站之星如何取消后台验证码生成?
已有域名和空间如何快速搭建网站?
建站之星如何助力企业快速打造五合一网站?
名字制作网站免费,所有小说网站的名字?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
网站制作价目表怎么做,珍爱网婚介费用多少?
建站168自助建站系统:快速模板定制与SEO优化指南
C++如何使用std::optional?(处理可选值)
小建面朝正北,A点实际方位是否存在偏差?
网站按钮制作软件,如何实现网页中按钮的自动点击?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
Python路径拼接规范_跨平台处理说明【指导】
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
高端网站建设与定制开发一站式解决方案 中企动力
中山网站推广排名,中山信息港登录入口?
建设网站制作价格,怎样建立自己的公司网站?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
家庭建站与云服务器建站,如何选择更优?
ui设计制作网站有哪些,手机UI设计网址吗?
如何高效生成建站之星成品网站源码?
贸易公司网站制作流程,出口贸易网站设计怎么做?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
*请认真填写需求信息,我们会在24小时内与您取得联系。