есть ли способ прочитать "выберите приложение фиктивного местоположения" в настройках разработчика Android?

Я знаю рекомендуемый способ узнать в Android, является ли местоположение поддельной точкой, примерно так:

boolean isMock = false;
if (android.os.Build.VERSION.SDK_INT >= 18) {
    isMock = location.isFromMockProvider();
} else { // Old Android versions (<6)
    isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
}

Итак, для текущих Android-устройств я должен запросить разрешение на местоположение, чтобы узнать, является ли это фиктивным местоположением. Но я думаю, что в этом нет необходимости, если я могу прочитать "Выберите приложение для фиктивного местоположения".

Кроме того, если вы хотите показать предупреждающее сообщение, вы можете настроить это сообщение. Например: можно сказать что-то вроде этого: "Удалите приложение com.lexa.fakegps". А когда пользователь нажимает "Принять", вы можете перенаправить на следующую ссылку: https://play.google.com/store/apps/details?id=com.lexa.fakegps

Кроме того, существуют поддельные приложения gps, которые возвращают false в методе isFromMockProvider.

Кроме того, вы можете делать статистику с приложениями, более полезными для ваших пользователей.

И, наконец, я не понимаю, почему вы можете прочитать все настройки разработчика, кроме "выбрать приложение для фиктивного местоположения":

https://developer.android.com/reference/android/provider/Settings

Есть какое-нибудь решение? Или это просто глупое невозможное?

2 ответа

Я не тестировал это, но это выглядит нормально. Я потратил час или около того, пытаясь придумать собственное решение, и оно было прямо здесь, на GitHub.

https://github.com/GantMan/jail-monkey/blob/master/android/src/main/java/com/gantix/JailMonkey/MockLocation/MockLocationCheck.java

Итак, прежде всего... используя следующий код

boolean isMock = false;
if (android.os.Build.VERSION.SDK_INT >= 18) {
    isMock = location.isFromMockProvider();
} else { // Old Android versions (<6)
    isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
}

вы не можете гарантировать, что местоположение устройства постоянно подделывается.

Для более старых версий android

isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");

используется, но то, что он делает, в основном просто показывает, включил ли пользователь настройки для разрешения фиктивного местоположения... поэтому он просто действует как фильтр для проверки

Поэтому, если я использую старый телефон и включаю этот параметр, даже если я не использую поддельное местоположение, он все равно возвращает значение true.

Для последних версий android

isMock = location.isFromMockProvider();

он глючный... может не всегда возвращать правильный ответ, т.е. даже если вы устанавливаете местоположение с помощью приложения фиктивного местоположения, иногда оно может возвращать false.

Вывод:

Завершить чтение настройки "выберите приложение фиктивного местоположения" и принять решение о ее значении - это просто глупость. и вы не можете писать программы, которые всегда не содержат ошибок.

Я лично пробовал и тестировал некоторые из поддельных приложений GPS, таких как
Lexa Fake GPS Location
Fake GPS

для меня во время моих тестов isFromMockProvider() всегда возвращал мне правильный результат. Поэтому я обнаружил, что вероятность обнаружения ошибки очень мала.

И чтобы убедиться, что это ошибочное значение, я нашел это средство в этом посте: Местоположение на Android: хватит издеваться надо мной! Цитирую средство из этой статьи

Поскольку большинство показаний местоположения правильно помечены, выявить и отклонить ложноотрицательные результаты не так уж сложно. Я выбрал следующую стратегию:

  • Запомните последнее место, помеченное как фиктивное

  • Если новое "немодельное" значение находится в пределах 1 км от последнего фиктивного, отклоните его.

  • Очищайте последнее фиктивное местоположение только после 20 последовательных "немодельных" чтений.

И я также рекомендую вам пройти FauChristian Answer для обнаружения или предотвращения, если пользователь использует поддельное местоположение

Спасибо...

Другие вопросы по тегам