有什么方法可以从Android开发人员设置中读取“选择模拟位置应用”?

问题描述 投票:0回答:2

我知道在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,我必须请求位置权限才能知道这是否是模拟位置。但是我认为没有必要阅读“选择模拟位置应用”。

hunk of Android developer options 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

有什么解决方法吗?还是仅仅是愚蠢的不可能的事情?

android geolocation mock-location
2个回答
0
投票

我还没有测试过,但这看起来合法。我花了一个小时左右的时间来想出自己的解决方案,它就在GitHub上。

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


0
投票

首先,通过使用以下代码

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

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

正在被使用,但它的基本作用只是提供用户是否打开了模拟位置的设置...因此它仅充当检查的过滤器

因此,如果我使用的是旧手机,即使我不在使用假的位置,也要打开此设置,它仍会返回true

对于最新版本的android

isMock = location.isFromMockProvider();

这是越野车……可能无法始终返回正确的答案,即,即使您使用模拟位置应用程序设置了位置,有时也可能返回false。

结论:

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

我亲自尝试过并测试了一些伪造的GPS应用程序,例如Lexa Fake GPS LocationFake GPS

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

并且为了确保它是错误的值,我在这篇文章中找到了这种补救措施:Location on Android: Stop Mocking Me!我引用了本文的补救措施

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

  • 记住最近标记为模拟的位置
  • 如果新的“非模拟”读数距离上一个模拟距离不到1公里,则拒绝它。
  • 仅在连续20个“非模拟”之后清除最后一个模拟位置读数。

  • 而且我也建议您通过FauChristian Answer for Detect or prevent if the user uses fake location

    谢谢...

  • © www.soinside.com 2019 - 2024. All rights reserved.