权限 ACCESS_MOCK_LOCATION 被忽略?
Posted
技术标签:
【中文标题】权限 ACCESS_MOCK_LOCATION 被忽略?【英文标题】:Permission ACCESS_MOCK_LOCATION is ignored? 【发布时间】:2013-01-18 10:17:38 【问题描述】:我没有进行广泛的测试,但有证据表明应用程序清单中的 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 读取,而不是顾名思义的访问(读取)。听起来更像是错误而不是功能。如果这是真的,那么没有办法真正确保 GPS 位置是真实的,而不是假的?
【问题讨论】:
请检查我的回答。 谢谢,但您并没有真正回答我的问题。我担心的是,一些第 3 方应用程序可以在非 root 设备上轻松伪造 GPS 位置,而我使用 GPS 的应用程序对此并不安全。我的应用程序是安全应用程序,如果任何最终用户可以用它伪造任何 GPS 位置,它的用处就会大大降低。有办法解决吗? 【参考方案1】:在http://developer.android.com/reference/android/Manifest.permission.html 中,写着Allows an application to create mock location providers for testing
,所以我认为你的想法是对的。
事实上,com.lexa.fakegps
可以在没有ACCESS_MOCK_LOCATION
的情况下模拟位置,前提是它具有 root 权限。此外,即使它具有 root 权限,它也需要将 Allow mock locations
切换到模拟位置。所以,我认为权限是针对普通应用程序而不是系统应用程序的。系统应用无需在AndroidManifest.xml
中声明权限即可拥有更多权限。
【讨论】:
【参考方案2】:由于没有人真正回答你的问题,我将提供一个答案:
也许 ACCESS_MOCK_LOCATION 真的意味着应用程序可以 自己模拟位置提供者?
是的。该权限允许应用“访问”“模拟位置”开发人员功能。这允许开发人员创建看似真实的模拟位置,以便开发/测试具有基于位置的功能的应用程序,而无需实际移动或更改(例如硬连接假 GPS)设备。
因为 Google 不知道您要测试什么应用,也不知道您希望如何提供虚假数据,所以它这样做了。作为开发人员功能,它减少了此功能对一般人群的曝光。
【讨论】:
谢谢,明确答复。所以这只是混淆权限名称。你知道我的问题的另一部分 - 我的应用程序如何确保它始终使用真实而不是模拟位置? 是否有意图去请求许可?其他应用能否检测到当前位置被欺骗?而且,我在哪里可以找到如何进行欺骗?【参考方案3】:您首先需要启用开发者模式,在 Android 4.2.1 中,通过转到 Settings
-> About Tablet
(靠近底部;可能对手机调用类似的名称)并点击底部的 Build number
来完成, 七次。开始点击后会出现倒计时,向您显示成为开发者还需要多少时间。
点击返回按钮返回Settings
,现在您将在您所在的“关于”菜单上方找到Developer options
项目 - 单击它,然后在DEBUGGING
下检查Allow mock locations
。您的设备现在应该正确地尊重ACCESS_MOCK_LOCATION
。
(如果您这样做的动机是让 Ingress 相信您在某个门户附近,那么您就很不走运了 - 当然,任何应用程序都能够检测到此设置已被启用并告诉您禁用它,所以你最多可以用它来补充你的 XM 供应。:-)
【讨论】:
-1 因为这不是答案,PageNotFound 有有效的答案。 是否有去那里请求许可的意图?其他应用能否检测到当前位置被欺骗?而且,我在哪里可以找到如何进行欺骗?【参考方案4】:禁用该特定权限的 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>
【讨论】:
以上是关于权限 ACCESS_MOCK_LOCATION 被忽略?的主要内容,如果未能解决你的问题,请参考以下文章
apache配置中的权限被拒绝:[Errno 13]权限被拒绝