我还没有进行过广泛的测试,但有证据表明应用程序清单中的android.permission.ACCESS_MOCK_LOCATION不能正常工作(即如果存在 - 允许模拟位置提供程序,否则不行)。因此https://play.google.com/store/apps/details?id=com.lexa.fakegps这样的假GPS应用程序可以与任何应用程序一起使用,无论它是否设置了ACCESS_MOCK_LOCATION。如果用户在设备设置中允许虚假位置,这似乎就足够了。
也许ACCESS_MOCK_LOCATION真的意味着应用程序可以自己模拟位置提供程序?如果是这样,那么它应该更像WRITE_MOCK_LOCATION,而不是名称所暗示的访问(读取)。听起来更像是bug而不是功能。如果这是真的,那么就没有办法真正确保GPS位置是真实的,而不是假的吗?
答案 0 :(得分:4)
在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
的情况下模拟位置。此外,它需要将Allow mock locations
切换到模拟位置,即使它具有root权限。所以,我认为许可适用于不适用于系统应用的常见应用。系统应用程序具有更多权限,无需在AndroidManifest.xml
中声明权限即可执行操作。
答案 1 :(得分:2)
您首先需要参与开发者模式,在Android 4.2.1中,转到Settings
- > About Tablet
(靠近底部;可能称为类似电话的内容)并点按底部的Build number
七次。一旦开始点击,就会出现倒计时,向您展示成为开发人员需要多少钱。
点击后退按钮返回Settings
,现在您将在“关于”菜单上方找到Developer options
项目 - 点击它,然后点击{{1}下的Allow mock locations
}}。您的设备现在应该正确地尊重DEBUGGING
。
(如果你这样做的动机是诱使Ingress相信你是一个门户网站,那么你运气不好 - 任何应用程序当然能够检测到这个设置已被使用并告诉你禁用它,所以你最多可以用它来补充你的XM供应。: - )
答案 2 :(得分:2)
由于没有人真正回答你的问题,我将提供答案:
也许ACCESS_MOCK_LOCATION真的意味着应用程序可以 本身模拟位置提供商?
是。该权限允许应用程序“访问”“模拟位置”开发人员功能。这允许开发人员创建看似真实的模拟位置,以便开发/测试具有基于位置的功能的应用,而无需实际移动或改变(例如,硬连接假GPS)设备。
由于Google不知道您要测试的应用程序或者您希望如何提供虚假数据,因此它就是这样做的。作为开发人员功能,它可以减少此功能对一般人群的影响。
答案 3 :(得分:1)
禁用该特定权限的MockLocation lint检查,即
<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>