Проверьте, было ли геолокация подделана

Я хочу убедиться, что местоположение, полученное LocationListener, является "реальным" и не исходит из поддельного источника (т. е. приложение Местоположение Spoofer). Меня не волнует "но пользователь иногда хочет подделать местоположение" - это приложение, которое не распространяется по Android market. Приложению не нужно, чтобы местоположение было таким точным - оно просто должно быть "реальным".

Как вы думаете, есть ли способ проверить, имеет ли местоположение подменен?
как вы думаете, это хороший способ предотвратить подмену местоположения?
может быть, есть android-метод, который дает мне реальное местоположение тем не менее?
может быть, есть android-метод, чтобы определить, было ли местоположение подделано?

мысли у меня были:

  • Проверьте черный список, если установлено приложение location-spoofing
  • включить / отключить различные поставщики местоположения и проверить их возвращенные локации
  • запустите фоновую службу, наблюдая за местоположением (пассивным способом) и проверьте внезапные изменения местоположения

пожалуйста, дайте мне свои мысли и вклад в эту проблему.

2 ответов


  • от имени поставщика: "gps" или "сеть" являются правильными
  • большинство обманщиков забывают отправлять обновления статуса GPS. Это то, что вы можете использовать в свою пользу

    // returns true if mock location enabled, false if not enabled.

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

лучший метод заключается в следующем:

  • провайдеры Mock location не отправляют данные NMEA. Поэтому создайте слушателя NMEA. Если вы не получаете обновление NMEA, но получаете действительные обновления GPS в onLocationChanged (), происходит подделка используемый.

посмотрите на "поддержание текущей наилучшей оценки" на следующей странице:

поддержание текущей наилучшей оценки