【问题标题】:How to stop fake locations using LocationClient on Android如何在 Android 上使用 LocationClient 停止虚假位置
【发布时间】:2014-09-01 12:27:07
【问题描述】:

我正在开发一款类似于地理藏宝的 GPS 游戏,它需要设备准确的 GPS 坐标。

我使用的是 LocationClient 而不是 LocationManager。

在测试初期,一位朋友指出,可以使用 Play 商店中的免费应用来伪造位置。一些研究表明,如果没有 root,这些应用程序需要启用模拟位置。所以我先简单检查一下是否启用了模拟位置,如果启用了,那么应用程序将不允许用户播放,直到它被禁用。

这让我开始思考,虽然设备已被植根,但在没有启用模拟位置的情况下,被植根的用户仍然可以伪造他们的位置,但是这些应用中的大多数仍然具有 MOCK_LOCATION 权限,无论设备是否植根。所以我使用了一种方法来检测任何需要模拟位置的应用程序。问题是,即使在我的非 root Note 3 上,似乎也有几个预安装的应用程序出于某种原因需要模拟位置,从而阻止了游戏。所以这个解决方案行不通。

有没有其他方法可以检查位置是否可能使用 LocationClient 伪造?

【问题讨论】:

    标签: android gps geolocation


    【解决方案1】:

    在 API 18+ 中,您可以使用 Location.isFromMockProvider 检查特定位置是否被模拟。如果应用提供模拟(虚假)位置,或者您在自己的应用中使用模拟提供程序,则此标志将设置为 true。

    当然,root 手机可以绕过这个。

    【讨论】:

      【解决方案2】:

      在您的设备中,转到设置>>开发者选项>>允许模拟位置

      必须在您的设备中选中此选项,这就是您获取模拟位置更新的原因。要停止接收,只需取消选中即可。

      在您的代码中,您还可以在位置跟踪活动的onCreate() 方法中设置mLocationClinet.setMockMode(false);

      我希望它有效:)

      【讨论】:

      • 请完整阅读我的帖子,我没有收到模拟位置更新,我试图防止用户欺骗他们的位置。我成功检查了是否启用了模拟位置并阻止应用程序运行,但我需要对有根设备进行二次检查,因为有根用户不需要启用模拟位置来欺骗他们的位置。
      • 据我所知不可能。尽管如此,他们是大纲,我不会为此付出太多努力。如果您真的想这样做,请检查用户是否已root,如果是,请检查更流行的模拟应用程序。如果已安装,请警告用户。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多