2013-01-18 180 views
7

我还没有做过广泛的测试,但是有证据表明,应用程序Manifest中的android.permission.ACCESS_MOCK_LOCATION不会像人们假设的那样工作(即,如果存在 - 允许模拟位置提供程序,否则不允许)。所以假GPS应用如https://play.google.com/store/apps/details?id=com.lexa.fakegps可以与任何应用程序一起工作,无论是否设置了ACCESS_MOCK_LOCATION。如果用户允许在设备设置中伪造位置,这似乎就足够了。权限ACCESS_MOCK_LOCATION被忽略?

也许ACCESS_MOCK_LOCATION真的意味着应用程序本身可以模拟位置提供程序吗?如果是这样,那么它应该更像WRITE_MOCK_LOCATION,而不是像名字所示那样访问(读取)。听起来更像是bug而不是功能。如果这是真的,那么没有办法真正确保GPS位置是真实的,而不是假的?

+0

请检查我的答案。 – PageNotFound

+0

谢谢,但你并没有真正回答我的问题。我担心的是,某些第三方应用程序可能会在非根源设备上轻松伪造GPS位置,而我的使用GPS的应用程序无法保证安全。我的应用程序是安全应用程序,如果有任何最终用户可以伪造任何GPS位置,则该应用程序的用处会大大减少有没有办法解决它? – JaakL

回答

1

因为没有人真正回答你的问题,我会提供一个答案:

也许ACCESS_MOCK_LOCATION真的意味着应用程序可以是 本身模拟位置提供商?

是的。该权限允许应用程序“访问”“模拟位置”开发人员功能。这使得开发人员可以创建模拟位置,这些位置似乎是真实的,以便开发/测试具有基于位置功能的应用程序,而无需实际移动或更改设备的实际移动或改变(例如,硬连线假GPS)。

因为Google不知道你想要测试什么应用程序,或者你想如何提供假数据,所以它做到了这一点。作为开发者功能,它减少了这个功能暴露给普通人群。

+0

谢谢,明确的答案。所以这只是令人困惑的权限名称。你是否知道我的问题的其他部分 - 我的应用程序如何确保它始终使用真实的而不是某个模拟位置? – JaakL

2

首先需要搞开发模式,这在安卓4.2.1通过将Settings做 - >About Tablet(接近底部,可能要求手机类似的东西),并在底部,七次挖掘Build number。一旦开始点击,就会出现倒计时,向您展示成为开发人员需要多少时间。

点击后退按钮返回到Settings,现在你会发现一个Developer options项目你在关于上面菜单 - 单击它,并选中Allow mock locationsDEBUGGING下。您的设备现在应该正确尊重ACCESS_MOCK_LOCATION。 (如果你这样做的动机是欺骗Ingress相信你在门户网站附近,那么你运气不好 - 当然,任何应用程序都能够检测到这个设置已被使用,并告诉你禁用它,所以你可以充其量使用它来补充你的XM供应。:-)

+1

-1,因为这不是答案,PageNotFound有有效答案。 –

3

http://developer.android.com/reference/android/Manifest.permission.html,它说Allows an application to create mock location providers for testing,所以我认为你认为是正确的。

实际上,com.lexa.fakegps只有具有root权限才能模拟位置,而不需要ACCESS_MOCK_LOCATION。此外,即使它具有root权限,它也需要将Allow mock locations切换到模拟位置。所以,我认为权限是针对不适用于系统应用的普通应用。在AndroidManifest.xml中,系统应用程序拥有更多权限来执行没有声明权限的操作。

1

禁用MockLocation皮棉检查对于特定的权限,即

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools"> 
    <uses-permission 
     android:name="android.permission.ACCESS_MOCK_LOCATION" 
     tools:ignore="MockLocation" /> 
</manifest>