android - 检查地理位置是否被欺骗

标签 android gps location position

我想确保 LocationListener 收到的位置是“真实的”位置,而不是来自欺骗源(即应用程序 Location Spoofer )。我不关心“但用户有时想欺骗位置”——它是关于一个没有在 android 市场上分发的应用程序。应用程序不需要如此准确的位置 - 它只需要是“真实的”。

你认为有没有办法检查位置是否被欺骗?
你认为什么是防止位置欺骗的好方法?
是否有一个 android 方法可以让我真实位置仍然如此?
是否可能有一个 android 方法来确定该位置是否已被欺骗?

我的想法:

  • 如果安装了位置欺骗应用程序,请检查黑名单
  • 启用/禁用不同的位置提供程序并检查它们返回的位置
  • 运行后台服务监视位置(以被动方式)并检查突然的位置变化

请给我您对此问题的想法和意见。

最佳答案

  • 从提供商名称:“gps”或“网络”是正确的
  • 大多数欺骗者忘记发送 GPS 状态更新。这是您可以利用的优势

    //如果启用模拟位置则返回 true,如果未启用则返回 false。

    if (Settings.Secure.getString(getContentResolver(),
           Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) 
           return false; 
           else return true;
    

最好的方法是:

  • 模拟位置提供商不发送 NMEA 数据。所以创建一个 NMEA 监听器。如果您没有获得 NMEA 更新,但您在 onLocationChanged() 中获得了有效的 GPS 更新,则使用了欺骗。

关于android - 检查地理位置是否被欺骗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623945/

相关文章:

android - 如何实现一个水平滚动的倒数计时器?

java - 如何停止执行直到所有异步任务在android中完成执行?

Android:以固定间隔拉取位置崩溃,Looper Prepare(是的,我搜索过!!)

iphone - 应用程序是否应该开始位置跟踪以便从 CLLocationManager 获取任何最后已知的位置?

android - 将 Stripe token 传递给服务器并在服务器上处理

android - studio 更新后出现 Gradle 错误

android - 具有运行时权限的基于 gps 的应用程序的体系结构

java - 在 GPS 和网络之间切换?

ios - 我如何避免由于防止变量为@(null)而导致崩溃?