所以其他应用程序可以从LocationManager获取对它的引用?
解决方法
有关代码示例,请查看GPX播放:
https://github.com/johncarpenter/Android-GPX-Mock-Location-Provider
注册位置提供者的代码从文件的第203行开始
安卓/ src目录/ COM / twolinessoftware /安卓/ PlaybackService.java.
如果你想要一个“真正的”位置提供者(例如,将你的功能部署为最终用户应用程序的一部分),一些消息来源说,除非该提供者在使用系统密钥签名的包中,否则无法完成,所以你必须拥有从源代码构建自己的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.我还没有详细查看它(或者)或者构建它,所以我不能说它是否有效以及它是什么需要它.但也许它提供了一些指示.