如何检测位置是否被触发 Mock Location
在 Android Marshmallow
?
以前,我用过 Settings.Secure.ALLOW_MOCK_LOCATION
但是,在 API 级别 23 中,这已被弃用。
我想检查触发器是假位置还是原始 GPS?
现在,检查 Mock Location
是否启用的替代方法是什么 Android Marshmallow
?
原文由 Bharath 发布,翻译遵循 CC BY-SA 4.0 许可协议
如何检测位置是否被触发 Mock Location
在 Android Marshmallow
?
以前,我用过 Settings.Secure.ALLOW_MOCK_LOCATION
但是,在 API 级别 23 中,这已被弃用。
我想检查触发器是假位置还是原始 GPS?
现在,检查 Mock Location
是否启用的替代方法是什么 Android Marshmallow
?
原文由 Bharath 发布,翻译遵循 CC BY-SA 4.0 许可协议
接受的答案是一个可行的解决方案,但是,为了完整起见,我想补充一些要点。
检测模拟位置的最佳内置方法(不仅自 Marshmallow 以来,而且自 API 18+ 以来)是使用 Location.isFromMockProvider() ,如其他答案和评论中所述。
我在不同设备和操作系统版本上对模拟位置进行了广泛试验,得出以下结论:
KEY_MOCK_LOCATION
extra bears the exact same information as .isFromMockProvider()
, ie .isFromMockProvider()
will return true
when the extra is present and false
当它不是。换句话说,它不提供任何附加值,只是一种更复杂的方法,用于查明某个位置是否被其提供者标记为模拟位置。有关更多信息,请参见 此处。所以我肯定会推荐使用 .isFromMockProvider()
。
在与 Android 位置(和模拟标签问题)斗争了很长一段时间后,我发布了 LocationAssistant ,这是一个实用程序类,可以可靠地拒绝具有 API 15+ 的非根设备上的模拟位置。它还可以减轻您大部分 FusedLocationProvider 样板的负担。也许您会发现它对您的下一个位置感知应用程序项目很有用。
原文由 KlaasNotFound 发布,翻译遵循 CC BY-SA 3.0 许可协议
3 回答798 阅读✓ 已解决
2 回答2k 阅读
2 回答921 阅读✓ 已解决
4 回答4.8k 阅读
1 回答1.1k 阅读✓ 已解决
1 回答690 阅读✓ 已解决
2 回答784 阅读
If you are using
FusedLocationProviderApi
and have set mock location usingsetMockLocation(mGoogleApiClient, fakeLocation);
in the callback/pendingIntentCallback the returnedLocation
object containsKEY_MOCK_LOCATION
extra, a布尔值,表示接收到的对象是模拟的。