如何在Android上使用LocationClient阻止假位置

如何在Android上使用LocationClient阻止假位置,android,gps,geolocation,Android,Gps,Geolocation,我正在做一个GPS游戏,类似于geocaching,它需要设备精确的GPS坐标 我使用的是LocationClient,而不是LocationManager 在测试初期,一位朋友指出,可以使用play store上的免费应用程序伪造位置。一些研究表明,如果没有root,这些应用程序需要启用模拟位置。因此,我开始了一个简单的检查,看看模拟位置是否已启用,如果是,那么应用程序将不允许用户播放,直到它被禁用 这让我想到,根用户仍然可以在没有启用模拟位置的情况下伪造他们的位置,但是大多数应用仍然具有模拟

我正在做一个GPS游戏,类似于geocaching,它需要设备精确的GPS坐标

我使用的是LocationClient,而不是LocationManager

在测试初期,一位朋友指出,可以使用play store上的免费应用程序伪造位置。一些研究表明,如果没有root,这些应用程序需要启用模拟位置。因此,我开始了一个简单的检查,看看模拟位置是否已启用,如果是,那么应用程序将不允许用户播放,直到它被禁用

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


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

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

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

在代码中,还可以将mLocationClinet.setMockModefalse设置为;在位置跟踪活动的onCreate方法中

我希望它能工作:

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


当然,有根的手机可以绕过这一点。

请仔细阅读我的帖子,我没有收到模拟位置更新,我正在努力防止用户欺骗他们的位置。我成功地检查了模拟位置是否已启用,并阻止应用程序运行(如果已启用),但我需要对根设备进行二次检查,因为根用户不需要启用模拟位置来欺骗他们的位置。据我所知,这是不可能的。尽管它们是大纲视图,但我不会在这方面花费太多精力。如果你真的想这么做,检查用户是否有根,如果他有根,检查更受欢迎的模仿应用程序。如果已安装,请警告用户。