![](/img/trans.png)
[英]How to get mock locations to work in android studio for phones that only have “Select mock location app” option in Developer Options?
[英]is there any way to read “select mock location app” from Android developer settings?
我知道在 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,我必须请求位置权限才能知道这是否是模拟位置。 但是我认为如果我可以阅读“选择模拟位置应用程序”,则没有必要。
此外,如果您想显示警报消息,您可以自定义此消息。 例如:您可以这样说:“请删除 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
有什么解决办法吗? 或者只是这是一件愚蠢的不可能的事情?
我没有对此进行测试,但这看起来是合法的。 我花了一个小时左右试图提出自己的解决方案,它就在 GitHub 上。
所以首先......通过使用以下代码
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();
这是错误的......可能并不总是返回正确的答案,即即使您使用模拟位置应用程序设置位置,有时它也可能返回错误。
结论:
结束阅读“选择模拟位置应用程序”设置并对其价值做出决定只是一件愚蠢的事情。 而且你不能编写始终没有错误的软件。
我亲自尝试并测试了一些假的 GPS 应用程序,例如
Lexa 假 GPS 位置
假GPS
对我来说,在我的测试过程中isFromMockProvider()总是返回正确的 output 所以我发现发现错误的可能性很小。
为了确保这是一个错误的值,我在这篇文章中找到了这个补救措施: Android 上的位置:停止 Mocking 我! 我引用这篇文章的补救措施
由于大多数位置读数都已正确标记,因此识别和拒绝假阴性并不难。 我选择了以下策略:
记住最近标记为模拟的位置
如果新的“非模拟”读数在上一个模拟的 1 公里范围内,则拒绝它。
我还建议您通过FauChristian Answer 检测或防止用户使用虚假位置的 go
谢谢...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.