为什么室内没有location呢?

因为我们开发的时候几乎肯定都是在室内的,这个时候卫星你是搜索不到的,所以必然是定位不了的,所以系统如何将位置信息通知给你的程序。所以要从根本上解决这个问题,就要解决位置信息获取问题。

那么我来告诉大家,只有NETWORK_PROVIDER这种模式才是室内定位可靠的方式,就是当location为null的时候只要用这个,NETWORK_PROVIDER。

不过直接用大家也是用不了的,为啥呢,因为大部分厂商也不会用google的服务,这种定位方式默认是没法用的。那怎么办?好办,找个替代的服务商就可以了,百度或者高德的位置信息sdk就可以解决这个问题。它的基本原理在上面已经提到过了,就是搜集你的wifi节点信息和你的手机基站信息来定位。

本篇文章我们来用百度解决。

用百度位置定位SDK

SDK下载:

http://lbsyun.baidu.com/sdk/download

SDK使用:

  • 申请百度的服务密钥,具体操作步骤见官网:   http://api.map.baidu.com/lbsapi/cloud/geosdk.htm
  • 将上面下载的sdk文件locSDK_4.1.jar拷贝到你项目的libs下
  • 修改AndroidManifest文件,在该文件里添加如下配置
<serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote" ></service><meta-dataandroid: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");//返回的定位结果是百度经纬度,默认值gcj02option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000msoption.disableCache(true);//禁止启用缓存定位option.setPoiNumber(5);    //最多返回POI个数   option.setPoiDistance(1000); //poi查询距离        option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息        mLocationClient.setLocOption(option);}public class MyLocationListener implements BDLocationListener {@Overridepublic 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室内定位问题(location为null)相关推荐

  1. android 9.0室内定位方案,Android GPS室内定位问题的解决方法(location为null)

    为什么室内没有location呢? 因为我们开发的时候几乎肯定都是在室内的,这个时候卫星你是搜索不到的,所以必然是定位不了的,所以系统如何将位置信息通知给你的程序.所以要从根本上解决这个问题,就要解决 ...

  2. android gps无法定位,解决GPS无法定位问题

    买来Z17一周了,期间GPS一直无法定位,绅士烦恼,摸索了半小时,终于解决了这个问题.方法不敢独享,先分享给大家.修改/system/etc/gps.conf文件即可.因APP不能发文件,修改后gps ...

  3. android java.lang.IllegalArgumentException: The observer is null.异常解决

    android java.lang.IllegalArgumentException: The observer is null.异常解决 参考文章: (1)android java.lang.Ill ...

  4. android 解决小米手机上选择照片路径为null的问题

    之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码,解决了这个问题,这里记录一下. ...

  5. Android中View转换为Bitmap及getDrawingCache=null的解决方法

    Android中View转换为Bitmap及getDrawingCache=null的解决方法 参考文章: (1)Android中View转换为Bitmap及getDrawingCache=null的 ...

  6. android小米手机上传图片,android 解决小米手机上选择照片路径为null的问题

    释放双眼,带上耳机,听听看~! 之前做了一个获取相册选择图片的功能,后来测试人员在小米的手机 测试时出现崩溃现象.自己就在网上查找资料,发现是小米的获取图片路径的代码与其他的手机不一样,于是修改了代码 ...

  7. android gps定位太慢,小米手机gps定位慢怎么解决?小米4解决GPS搜星慢的方法

    经常使用小米4进行导航或者地图的用户可能会发现,小米4的搜星比较慢,有时候明明是晴朗开阔的天气,却迟迟无法定位GPS.那么小米手机gps定位慢怎么解决?其实小米4的搜星慢是软件优化的问题,可以通过打补 ...

  8. Android原生GPS定位以及位置解析

    最近在写一个纯本地的APP项目,项目中要求获取当前坐标的经纬度以及城市名,以前只做过网络定位(百度API和高德API),但是这两个都需要联网实现.so,选择GPS无疑是最好的选择了.我大概的整理了一下 ...

  9. android 通过GPS获取用户地理位置并监听位置变化

    1 Location Manager 管理服务 2 Location Provider 提供数据的content provider 方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<us ...

最新文章

  1. 直播回顾|慕尼黑工业大学博士详解室内SLAM中的几何约束
  2. SVM-支持向量机原理详解与实践之三
  3. linux 内核驱动的poll,嵌入式Linux驱动开发(五)——poll机制原理以及驱动实现...
  4. 记录一次spark连接mysql遇到的问题
  5. Hibernate之Session merge与update方法
  6. Jsp版本的计算器(九大对象)
  7. 多重背包O(N*V)算法详解(——使用单调队列)
  8. python自我复制的程序_Python自我
  9. Myeclipse6.5中安装maven
  10. 远程控制,从个人便捷走向企业安全
  11. 全球及中国坚果产业发展现状及趋势分析,市场发展潜力巨大「图」
  12. 如何降低less的版本
  13. 智力题解题报告No.12 倒油 倒酒 倒水问题
  14. vue 后台系统中多页面标签
  15. 阿里云ECS服务器配置怎么选?
  16. 前端开发需要学什么?
  17. 关于瓦力机器人的设计构想
  18. Android项目,library中根据资源id获取资源
  19. list_ndarray_csr_lil占用空间比较
  20. 3分钟掌握自给IP地址

热门文章

  1. 数据结构——队列的C语言代码实现
  2. STM32的完整启动流程分析
  3. 2015最流行的Android组件、工具、框架大全 UI框架大全
  4. 【数据降维方法】使用Python实现因子分析
  5. 小笑话_休闲娱乐_1
  6. Adobe注销账户登录
  7. featureCounts进行转录本定量
  8. 日志收集工具 Fluentd 使用教程
  9. 倍福--上升沿和下降沿使用
  10. iview table 求和_iView table 实现单元格合并