【发布时间】:2011-03-24 14:30:00
【问题描述】:
有谁知道如何提供自己的 LocationProvider 并将其发布到系统, 所以其他应用可能会从 LocationManager 中获取对它的引用?
【问题讨论】:
-
这个问题有满意的答案吗??????
标签: android
有谁知道如何提供自己的 LocationProvider 并将其发布到系统, 所以其他应用可能会从 LocationManager 中获取对它的引用?
【问题讨论】:
标签: android
出于开发和测试目的,您可以实现一个模拟位置提供程序。您需要在开发人员选项中启用“允许模拟位置”,以便应用程序查看来自该提供商的位置。
有关代码示例,请查看 GPX 播放:
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。
类和方法记录在代码中。
编辑:查看
https://github.com/android/platform_frameworks_base/blob/master/core/res/AndroidManifest.xml
从第 607 行开始,INSTALL_LOCATION_PROVIDER 权限的保护级别似乎是 signatureOrSystem。这意味着任何使用此功能的应用程序(即安装位置提供程序,不一定是位置提供程序本身)都需要使用与平台相同的密钥进行签名(这将要求您从源代码构建整个 Android 系统)或作为系统应用程序安装(可能在有根设备上运行)。
有一些代码在
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 线程:Why are these permissions being refused?
所有这些都是出于安全考虑。
【讨论】:
Pentium10提示的好像下线了,看看http://pedroassuncao.com/2009/11/android-location-provider-mock/
或 google 的 LocationManagerProximitryTest:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/location/LocationManagerProximityTest.java
或者这里有一些其他类似的问题与工作解决方案/代码:Android mock location on device?
【讨论】:
【讨论】: