Android网络定位服务定制简述
2016-06-06 11:26
786 查看
Android添加高德或百度网络定位服务
Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状态,因此对于第三方OEM厂商经常需要与高德或百度合作,使用这两个服务提供商提供的网络位置定位服务。现将在Android平台集成第三方网络定位服务的步骤简述如下:
1、向高德或百度获取网络定位服务apk,并集成至system/app目录下,有时需要同步获取其运行时需要的库,并集成与指定目录,一般是system/lib目录下,目前其包名为:
高德:com.amap.android.location
百度:com.baidu.map.location
2、配置Config.xml文件(frameworks/base/core/res/res/values)
<stringname="config_geocoderProviderPackageName"translatable="false">@null</string>
从配置文件中可以看到这里有4个开关,分别对应于NLP、Fused、Flp、Geocoder服务,这里以NLP和Gecoder服务为例。
若config_enableNetworkLocationOverlay的值设为false,则使用config_networkLocationProviderPackageName
若config_enableNetworkLocationOverlay的值为true,则使用
例如定制百度定位,则需要配置如下:
3、网络服务binder的逻辑在LocationManagerService.java中loadProviderLocked方法中
注意事项1:一般厂商都会添加兼容设置,(1)比如会同时添加高德、百度、Google定位服务,能找到那个服务则binder对应服务,这时候可能需要做包名验证,因为Android原生只做签名验证,若此时OEM对高德、百度服务重新签名则无法做到识别binder,会造成重复binder同一个服务现象。(2)添加国内、国外自动切换的功能,此时需要结合通信提供的接口,实现国内外的判断。
注意事项2:成功binder到服务后,则会添加对该服务的监控,包的卸载,加载、安装都会引起rebinder动作
Android的网络定位服务以第三方的APK方式提供服务,由于在国内Android原生自带的com.google.android.gms服务几乎处于不可用状态,因此对于第三方OEM厂商经常需要与高德或百度合作,使用这两个服务提供商提供的网络位置定位服务。现将在Android平台集成第三方网络定位服务的步骤简述如下:
1、向高德或百度获取网络定位服务apk,并集成至system/app目录下,有时需要同步获取其运行时需要的库,并集成与指定目录,一般是system/lib目录下,目前其包名为:
高德:com.amap.android.location
百度:com.baidu.map.location
2、配置Config.xml文件(frameworks/base/core/res/res/values)
<boolname="config_enableNetworkLocationOverlay"translatable="false">true</bool> <stringname="config_networkLocationProviderPackageName"translatable="false">@null</string> <boolname="config_enableFusedLocationOverlay"translatable="false">true</bool> <stringname="config_fusedLocationProviderPackageName"translatable="false">com.android.location.fused</string> <boolname="config_enableHardwareFlpOverlay"translatable="false">true</bool> <stringname="config_hardwareFlpPackageName"translatable="false">com.android.location.fused</string> <boolname="config_enableGeocoderOverlay"translatable="false">true</bool>
<stringname="config_geocoderProviderPackageName"translatable="false">@null</string>
从配置文件中可以看到这里有4个开关,分别对应于NLP、Fused、Flp、Geocoder服务,这里以NLP和Gecoder服务为例。
若config_enableNetworkLocationOverlay的值设为false,则使用config_networkLocationProviderPackageName
若config_enableNetworkLocationOverlay的值为true,则使用
<string-arrayname="config_locationProviderPackageNames"translatable="false">
<!--ThestandardAOSPfusedlocationprovider-->
<item>com.android.location.fused</item>
</string-array>
例如定制百度定位,则需要配置如下:
<string-arrayname="config_locationProviderPackageNames_baidu"translatable="false">
<!--TheBaiduNetworkLocationProvider-->
<item>com.baidu.map.location</item>
<!--ThestandardAOSPfusedlocationprovider-->
<item>com.android.location.fused</item>
</string-array>
3、网络服务binder的逻辑在LocationManagerService.java中loadProviderLocked方法中
注意事项1:一般厂商都会添加兼容设置,(1)比如会同时添加高德、百度、Google定位服务,能找到那个服务则binder对应服务,这时候可能需要做包名验证,因为Android原生只做签名验证,若此时OEM对高德、百度服务重新签名则无法做到识别binder,会造成重复binder同一个服务现象。(2)添加国内、国外自动切换的功能,此时需要结合通信提供的接口,实现国内外的判断。
注意事项2:成功binder到服务后,则会添加对该服务的监控,包的卸载,加载、安装都会引起rebinder动作
相关文章推荐
- Caffe技巧之使用snapshot来继续网络训练
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
- paper 75:使用MATLAB的神经网络工具箱创建神经网络
- 简单安装配置lighttpd
- 网络协议概述:物理层、连接层、网络层、传输层、应用层详解
- Java客户端通过Http发送POST请求上传文件到web服务器
- 苹果强制适配IPv6-only网络 该怎么做iOS应用兼容适配IPv6 Mac创建 IPV6测试环境
- 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
- linux基础(32)--网络监测和抓包--RHEL6.5
- VB.NET中网络编程所需组件WinHTTP的添加
- 配置https双向认证,以及用soapui调试
- iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
- 图解https协议
- iOS开发网络篇—使用ASI框架进行文件下载
- node-http-proxy修改响应结果实例代码
- 关于HttpClient的总结
- 网络上收集的mantis 与bugfree 的比较
- iOS开发网络篇—数据缓存
- iOS开发网络篇—发送json数据给服务器以及多值参数
- iOS开发网络篇—监测网络状态