[英]How to provide your own LocationProvider on Android?
有谁知道如何提供自己的LocationProvider并将其发布到系统,所以其他应用程序可以从LocationManager获取对它的引用?
出于开发和测试目的,您可以实现模拟位置提供程序。 您需要在开发人员选项中启用“允许模拟位置”,以便应用程序查看该提供程序中的位置。
有关代码示例,请查看GPX播放:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider
注册位置提供程序的代码从文件android/src/com/twolinessoftware/android/PlaybackService.java
第203行开始。
如果你想要一个“真正的”位置提供者(例如,将你的功能部署为最终用户应用程序的一部分),一些消息来源说除非该提供者在使用系统密钥签名的包中,否则无法完成,所以你必须拥有从源代码构建自己的ROM,使用密钥签名,使用相同的密钥为您的位置提供商签名,然后在手机上安装。
但是,Android在某些时候引入了“非捆绑”位置提供商。 显然他们需要这样才能将他们自己的NetworkLocationProvider从Android核心移动到Google Apps包中。
我还没有看到一个非捆绑的位置提供商在实践中工作,我不知道任何使用它的开源代码,但看起来最近版本的Android支持“售后”位置提供商。
相应库的源代码位于
https://github.com/CyanogenMod/android_frameworks_base/tree/cm-10.1/location/lib
位置提供程序必须扩展com.android.location.provider.LocationProviderBase
。
代码中记录了类和方法。
编辑:看着
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
从第607行开始,看起来INSTALL_LOCATION_PROVIDER
权限的保护级别是signatureOrSystem
。 这意味着任何使用此功能的应用程序(即安装位置提供程序,不一定是位置提供程序本身)都需要使用与平台相同的密钥进行签名(这需要您从源代码构建整个Android系统)或者作为系统应用程序安装(可能在root设备上运行)。
有一些代码
https://github.com/microg/NetworkLocation
这似乎实现了LocationProvider。 我还没有详细查看它(或者)或者构建它,所以我不能说它是否有效以及它是什么需要它。 但也许它提供了一些指示。
它无法完成。
问题是只允许OEM安装新的位置提供程序。 第三方开发人员无法向其应用程序授予安装新位置提供程序所需的权限(android.permission.INSTALL_LOCATION_PROVIDER)。
在这个帖子中查看Dianne Hackborn(Android框架工程师)的答案:
https://groups.google.com/d/topic/android-developers/OvCcdvO6jZY/discussion
要安装新的位置提供程序,您应该开发一个全新的固件(如http://www.cyanogenmod.com/ ),在此固件中插入新的位置提供程序,并在用户的手机上安装所有这些内容。
请参阅此SO线程: 为什么这些权限被拒绝?
所有这一切都是出于安全考虑。
Pentium10的建议似乎是离线的,请查看http://pedroassuncao.com/2009/11/android-location-provider-mock/
或谷歌的LocationManagerProximitryTest: http : //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java
或者这里有一些其他类似的问题与工作解决方案/代码: 设备上的Android模拟位置?
阅读有关Android位置提供程序mock的教程
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.