关于Android中的位置服务解读

关于Android中的位置服务解读

一提到位置或者定位,一般的开发者会第一时间百度地图和高德。这么做其实把自己仅仅当成了一个Api caller。还是细细了解一下系统的关于位置的架构比较好。下面开始细细品味。

不说第三方定位,系统原生带有位置提供者相关的API有三种:

提供者描述
NETWORK_PROVIDERGMS或者手机制造商,原生手机不装GMS是为空的。装了GMS会出现“Google 位置信息服务”;
GPS_PROVIDER手机GPS硬件,硬件有这个模块一般都支持,注意室内是获取不了的
PASSIVE_PROVIDER暂未了解
FUSED_PROVIDER隐藏了,被GMS私用

关于设置中位置三种选项分别为:
准确度高:使用 GPS、WLAN、移动网络和传感器来获取最准确的位置信息。使用 Google 位置信息服务更快速、更准确地确定您手机的大致位置。
耗电量低:使用耗电量较低的数据来源(如 WLAN 和移动网络)。使用 Google 位置信息服务更快速、更准确地确定您手机的大致位置。
仅限设备:仅使用 GPS(不使用 Google 位置信息服务)来提供位置信息。这种模式判断手机大致位置的速度可能比较慢,而且耗电量也可能较大。

再说一个GNSS,这个是一个新技术(像是支付行业中的聚合支付,将多种支付方式进行汇总,这里是将多国定位卫星,以前只是使用GPS,现在同时使用了,GPS北斗等等),但是应用开发者不需要关注,它已经被封装到了GPS_PROVIDER,应用程序开发不需要为"GNSS"进行特别的考虑。

Google 位置信息服务

为什么原生手机装了GMS,开发者就可以获取到NETWORK_PROVIDER的呢?就是这个「Google 位置信息服务」起得作用,具体是哪个包呢?

com.android.location.service.FusedLocationProvider 
com.android.location.service.v3.NetworkLocationProvider

模拟定位ACCESS_MOCK_LOCATION

这个是Android提供了一个为了模拟位置的接口,只在开发者选项中提供,这个接口可以模拟所有的PROVIDER,直接向系统接口写入经纬度信息,系统就会将此信息返回给需要的App。

NETWORK_PROVIDER

网络定位都是谁提供的呢?国际上一个是Google提供,国内一般都是使用百度或者高德,OEM厂家需要将其内置到ROM中。
对于MIUI华为等

com.baidu.map.location
com.amap.android.location (最新)
com.xiaomi.metoknlp
com.qualcomm.location.nlp.NlpProxyService
com.amap.android.ams (过时,最高v1.9.2.16支持到8.1)

这方面资料很少,因为有这个需求的人很少。大厂ROM已经做了,小厂的CPU厂家也找了两大地图定位厂家合作了,如果你是一个个人玩家,就需要自己去找到这些网络定位提供者。

应用层定位SDK

最后再说一下应用层定位SDK,上面都是framwork层的标准Api的位置系统,无论提供者是谁,App只要按照标准Api就可以取到位置。而国内App大多数会使用应用层的百度或者高德位置SDK,这个也在应用层级别提供了"NETWORK_PROVIDER",换句话说系统在不断的搜索周边的WiFi来定位,这些SDK也会不断的搜索。这也开启定位时非常耗电的一个原因。

其他资料

https://stackoverflow.com/questions/44601305/error-in-adding-location-service-to-android-custom-rom
com.android.location.fused
fused只是将NETWORK_PROVIDER和GPS进行了封装。
使用百度地址SDK为系统提供位置服务,apk名字命名为com.android.location.fused
https://www.cnblogs.com/zml-forever/p/5563189.html
https://github.com/microg/AppleWifiNlpBackend
frameworks/base/core/res/res/values/config.xml
https://www.jianshu.com/p/46f13b2da965
https://felixc.at/2016/09/fix-google-gms-network-location-on-your-android-rom/
https://www.jianshu.com/p/bfe2b3896445
https://www.cnblogs.com/zml-forever/p/5563189.html
https://github.com/RikkaApps/StorageRedirect-assets/issues/364
AutoNavi location services 1.8.0.12
https://www.apkmirror.com/apk/oneplus-ltd/autonavi-location-services/autonavi-location-services-1-8-0-12-release/autonavi-location-services-1-8-0-12-android-apk-download/
AutoNavi location services v1.9.2.16 APK
https://android-apk.org/com.amap.android.ams/30577606-autonavi+location+services-v1.9.2.16/lang/fa/
frameworks/base/core/java/android/app/ActivityManager.java
frameworks/base/core/java/android/app/ActivityManagerNative.java#3804
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

袁保康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值