关于Android中的位置服务解读

关于Android中的位置服务解读

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

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

提供者 描述
NETWORK_PROVIDER GMS或者手机制造商,原生手机不装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

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

应用层定位SDK

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

你可能感兴趣的:(Android)