当前位置: 首页 > 编程笔记 >

解决Android原生定位的坑

周博达
2023-03-14
本文向大家介绍解决Android原生定位的坑,包括了解决Android原生定位的坑的使用技巧和注意事项,需要的朋友参考一下

Android原生定位的代码网上已经很多了,就不贴出来。

简单了解下:

GPS_PROVIDER:通过手机内置的GPS芯片,利用卫星获取定位信息。位置监听、卫星状态监听很耗电且室内定位很不准确。

NETWORK_PROVIDER:网络定位通过基站和WiFi节点,利用节点id在定位数据服务器查询位置信息。但是国内网络不允许,且有消息称Google已不提供该服务。so网上出现的此种方式获取定位信息不可用,也就是说NETWORK_PROVIDER在国内不可用。

PASSIVE_PROVIDER:被动定位,其他应用比如百度、高德等使用了定位,系统会更新定位信息并保存下来,通过此方式可以获取最近一次的位置信息。

第三方SDK当然好用了,但是要注意获取的经纬度是经过了偏移的,只适配自己的地图。比如用百度地图SDK获取的经纬度在百度地图上是准确的,在高德地图上显示可能就会有一定的偏差。如果经纬度和地图不是成套使用就要考虑偏移的情况,而不是获取的经纬度不准确。第三方SDK都有自己的网络定位数据,他们的网络定位不仅仅是依靠服务器查询,还有一套算法支撑,所以室内定位比较准确。

有些项目不使用第三方SDK,只能用原生方法获取定位。NETWORK_PROVIDER 被迫放弃,PASSIVE_PROVIDER 只能是辅助,GPS_PROVIDER 需要增加精度。

我是这么处理的:

1. addGpsStatusListener 监听卫星状态,当信号值 > 1 的卫星数量在4颗以上,才可以使用 GPS_PROVIDER;

2. 速度>0.5 且 精度 < 50 才会被认为是有效的经纬度数据(我的项目中设备是移动的)。

补充:使用Android自带api定位失败的原因

前奏:使用高德百度等定位,集成那么麻烦。为何不使用android自带的api进行定位。省时省力?

1.使用自带定位很简单,如下图

2.继承LocationListener

3.如果获取到就解析数据

但是,问题来了。

位置提供者就两种方式,要么network,要么gps.

问题:

1.使用gps,收不到任何回调。

2.使用network,一直回调onProviderDisabled

原因:那就是当你在室内开发时,你的手机根本就没法获取位置信息,你叫系统如何将位置信息通知给你的程序。

所以要从根本上解决这个问题,就要解决位置信息获取问题。

刚刚也提到了,只有NETWORK_PROVIDER这种模式才是室内定位可靠的方式,只不过由于大陆的怪怪网络,且大部分厂商也不会用html" target="_blank">google的服务,这种定位方式默认是没法用的。

那怎么办?好办,找个替代的服务商就可以了,百度的位置信息sdk就可以解决这个问题。

它的基本原理在上面已经提到过了,就是搜集你的wifi节点信息和你的手机基站信息来定位。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持小牛知识库。如有错误或未考虑完全的地方,望不吝赐教。

 类似资料:
  • 运行React Native APL有4种方法。 > < Li > react-本机运行-android < li>react-native run-iso < li>XCODE < li> Android Studio 适用于另一个终端屏幕,在、、上。但Android Studio不起作用,错误如下。 [ 12-14 14:02:59.506 2905: 2928 E/ ]无法从assets加载

  • 本文向大家介绍iOS 11 BUG的发现、定位和解决,包括了iOS 11 BUG的发现、定位和解决的使用技巧和注意事项,需要的朋友参考一下 前言 在iOS 11发布之后,出现了一系列适配相关的问题,UIScrollView在pagingEnabled=YES时滑动手势不灵敏,UITableView的滑动删除功能变动,UIImagePickerViewController的取消按钮点击区域变小等,本

  • 本文向大家介绍原生js的ajax和解决跨域的jsonp(实例讲解),包括了原生js的ajax和解决跨域的jsonp(实例讲解)的使用技巧和注意事项,需要的朋友参考一下 最近慢慢感觉,学再多框架,库,都不如老老实实先把基础弄扎实了。 不说废话,先上一个用ajax请求下本地的一个.txt文件 执行效果如下,点击show就会通过ajax请求本地的.txt文件。 代码比较简单,加上注释,相信很容易就看得懂

  • 我试图在android中为react原生开发原生模块。与https://facebook.github.io/react-native/docs/native-modules-android.html#content的链接完全一致 但它给了我错误 我已经实现了toastandroid.js 然后在其他Jsfiles中尝试使用

  • 本文向大家介绍MSSQL产生死锁的根本原因及解决方法,包括了MSSQL产生死锁的根本原因及解决方法的使用技巧和注意事项,需要的朋友参考一下 一、 什么是死锁 死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程. 二、 死锁产生的四个必要条件 •互斥条件:指进程

  • 本文向大家介绍详解Android原生json和fastjson的简单使用,包括了详解Android原生json和fastjson的简单使用的使用技巧和注意事项,需要的朋友参考一下 android原生操作json数据 主要是两个类 JSONObject 操作对象     JONSArray操作json数组 对象转json Log日志显示 json转对象 新建一个JSONObject 把json串通过