3

我知道在 Android 中了解某个位置是否是假点的推荐方法是这样的:

boolean isMock = false;
if (android.os.Build.VERSION.SDK_INT >= 18) {
    isMock = location.isFromMockProvider();
} else { // Old Android versions (<6)
    isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
}

因此,对于当前的 Android,我必须请求位置权限才能知道这是否是模拟位置。但是我认为如果我可以阅读“选择模拟位置应用程序”,则没有必要。

一大堆 Android 开发者选项 huk

此外,如果您想显示警报消息,您可以自定义此消息。例如:您可以这样说:“请删除 com.lexa.fakegps 应用程序”。当用户点击“接受”时,您可以重定向到下一个链接:https ://play.google.com/store/apps/details?id=com.lexa.fakegps

此外,还有一些假 gps 应用程序在 isFromMockProvider 方法中返回 false。

此外,您可以使用对您的用户更有用的应用程序进行统计。

最后,我不明白为什么除了“选择模拟位置应用程序”之外,您可以阅读开发人员设置的所有设置:

https://developer.android.com/reference/android/provider/Settings

有什么解决办法吗?或者只是这是一件愚蠢的不可能的事情?

4

2 回答 2

2

我没有对此进行测试,但这看起来是合法的。我花了一个小时左右试图提出自己的解决方案,它就在 GitHub 上。

https://github.com/GantMan/jail-monkey/blob/master/android/src/main/java/com/gantix/JailMonkey/MockLocation/MockLocationCheck.java

于 2020-05-30T12:00:15.797 回答
1

所以首先......通过使用以下代码

boolean isMock = false;
if (android.os.Build.VERSION.SDK_INT >= 18) {
    isMock = location.isFromMockProvider();
} else { // Old Android versions (<6)
    isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
}

您无法确保设备位置始终是伪造的。

对于旧版本的安卓

isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");

正在使用,但它的作用基本上只是给出用户是否打开了允许模拟位置的设置......所以它只是作为一个过滤器来检查

因此,如果我使用的是旧手机并打开此设置,即使我没有使用虚假位置,它仍会返回 true

对于最新版本的安卓

isMock = location.isFromMockProvider();

这是错误的......可能并不总是返回正确的答案,即即使您使用模拟位置应用程序设置位置,有时它也可能返回错误。

结论:

结束阅读“选择模拟位置应用程序”设置并对其价值做出决定只是一件愚蠢的事情。而且你不能编写始终没有错误的软件。

我亲自尝试并测试了一些假 GPS 应用程序,例如
Lexa Fake GPS Location
Fake GPS

对我来说,在我的测试过程中isFromMockProvider()总是返回正确的输出所以我发现发现错误的可能性很小。

为了确保它是一个错误的值,我在这篇文章中找到了这个补救措施:Android 上的位置:停止嘲笑我!我引用这篇文章的补救措施

由于大多数位置读数都已正确标记,因此识别和拒绝假阴性并不难。我选择了以下策略:

  • 记住最近标记为模拟的位置

  • 如果新的“非模拟”读数在上一个模拟的 1 公里范围内,则拒绝它。

  • 仅在连续 20 次“非模拟”读数后清除最后一个模拟位置。

如果用户使用虚假位置,我还建议您通过FauChristian Answer 进行检测或阻止

谢谢...

于 2020-05-30T16:10:42.353 回答