0

В нашем приложении для Android нам нужно определить, когда пользователи предоставляют нам фальшивые адреса. Когда мы отключим приложение поддельного местоположения («Fake GPS»), поставщик Fused Location продолжает отправлять нам старое местоположение, но без макетного ключа местоположения.Поддельные местоположения GPS сохраняются после отключения

Это известная ошибка? Есть ли способ обнаружить, были ли эти новые местоположения от поддельного провайдера?

Мы используем Nexus 6P с 6.0.1, чтобы проверить

ответ

0

При остановке поддельного приложения GPS, макет местоположение хранятся для поставщика GPS. И не предполагайте, что реальное местоположение будет получать всякий раз, когда вы нажимаете кнопку остановки. Вы можете сделать что-то подобное после остановки.

  • Включить GPS (если отключен) запрос местоположения
  • Марки для GPS (открыть карту Google)
  • значка GPS начнет мигать, просто ждать (но не закрытая)

Is есть ли способ обнаружить, были ли эти новые местоположения от поддельного провайдера?

Для неучтенных устройств можно понять, является ли местоположение ложным или нет. Посмотрите это link

0

С момента выпуска API 18, Location объект имеет способ isFromMockProvider, чтобы проверить, находится ли местоположение от MockProvider.

public static boolean isMockLocation(Location location) { 
    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 && location != null && location.isFromMockProvider(); 
} 

На API 17 и ниже, фиктивные местоположения обнаружены с помощью Settings.Secure.

public static Boolean isMockLocationEnabled(Context context) { 
    return !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"); 
} 

Общая схема с фиктивных местоположений является то, что подшипник, скорость, точность, высота и интервал времени (между последовательными точками данных) жестко закодированные значения. Но несколько раз isFromMockProvider ненадежен для некоторого местоположения означает, что они не помечены как макет местоположения. Но эти местоположения имеют гораздо более низкую точность, чем другие показания местоположения. Большинство Fake GPS отправляют все места с фиксированной точностью. Но когда вы отключите поддельный GPS, непомеченное местоположение может появиться из-за результата логики слияния FusedLocation API.

Так что вы можете сделать, чтобы обнаружить эти места

  • Keep самый последний обнаруженный макет местоположение.
  • Рассчитайте расстояние между последним мокром местоположением и текущим немаркированным местоположением.
  • Если расчетное расстояние меньше 1 км, то отклоните его.
  • Удалить последнее сохраненное местоположение, если вы получили по меньшей мере 10 удачных мест.

Этот подход будет работать большую часть времени, но когда-нибудь это решение по-прежнему будет обмануто.

Код скопирован с данного blog.

Смежные вопросы