如何在Android上提供自己的LocationProvider?

Mar*_*hon 7 android

有谁知道如何提供自己的LocationProvider并将其发布到系统,所以其他应用程序可以从LocationManager获取对它的引用?

use*_*408 7

出于开发和测试目的,您可以实现模拟位置提供程序.您需要在开发人员选项中启用"允许模拟位置",以便应用程序查看该提供程序中的位置.

有关代码示例,请查看GPX Playback:https:
//github.com/johncarpenter/Android-GPX-Mock-Location-Provider

注册位置提供者的代码从文件的第203行开始 android/src/com/twolinessoftware/android/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.

代码中记录了类和方法.

编辑: 从第607行开始查看
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
,它看起来像是INSTALL_LOCATION_PROVIDER权限的保护级别signatureOrSystem.这意味着任何使用此功能的应用程序(即安装位置提供程序,不一定是位置提供程序本身)都需要使用与平台相同的密钥进行签名(这需要您从源代码构建整个Android系统)或者作为系统应用程序安装(可能在root设备上运行).


https://github.com/microg/NetworkLocation上 有一些代码
似乎实现了LocationProvider.我还没有详细查看它(或者)或者构建它,所以我不能说它是否有效以及它是什么需要它.但也许它提供了一些指示.

  • 显然,UnifiedNLP旨在使用Android构建系统构建.这是构建作为ROM映像一部分的组件的标准方法,但是可以构建单独的组件(请参阅Github repo主页上的构建说明).您可能不需要克隆整个AOSP源代码树,只需要克隆它的相关部分.你提到的那个看起来是一个好的开始.您可能希望查看Android构建说明(例如CyanogenMod的说明),以了解如何在本地设置代码树. (2认同)