Как получить доступ к Cordova API с внешних страниц XML / HTML?

Спустя пару лет наткнулся на эту тему. В 2016 году большинство устройств Android будут иметь уровень API> = 18 и поэтому должны полагаться на Location.isFromMockProvider (), как указано Fernando .

Я интенсивно экспериментировал с фальшивым / макетным местоположения на разных устройствах и дистрибутивах Android. К сожалению .isFromMockProvider () не на 100% надежнее. Время от времени подделка не будет помечена как макет . Похоже, что это связано с некоторой ошибочной логикой внутреннего слияния в Google Location API.

Я написал подробное сообщение в блоге об этом , если вы хотите узнать больше. Подводя итог, если вы подписаны на обновления местоположения из API местоположения, затем включите поддельное приложение GPS и распечатайте результат каждой команды Location.toString () на консоли, вы увидите что-то вроде этого:

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

Чтобы исправить эту проблему, я написал класс утилиты, который будет надежно подавлять местоположения Mock во всех современных версиях Android (уровень API 15 и выше):

LocationAssistant - бесплатные обновления местоположения на Android

В принципе, он «недоверяет» немощные местоположения, которые находятся в пределах 1 км от последнего известного макетного местоположения, а также называет их как макет. Он делает это до тех пор, пока не достигнет значительного количества немощных мест. LocationAssistant может не только отбрасывать ложные местоположения, но и освобождает вас от большинства проблем с настройкой и подпиской на обновления местоположения.

Чтобы получать только реальные обновления местоположения (например, подавлять издевки), используйте его следующим образом :

public class MyActivity extends Activity implements LocationAssistant.Listener {

    private LocationAssistant assistant;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        // You can specify a different accuracy and interval here.
        // The last parameter (allowMockLocations) must be 'false' to suppress mock locations.  
        assistant = new LocationAssistant(this, this, LocationAssistant.Accuracy.HIGH, 5000, false);
    }

    @Override
    protected void onResume() {
        super.onResume();
        assistant.start();
    }

    @Override
    protected void onPause() {
        assistant.stop();
        super.onPause();
    }

    @Override
    public void onNewLocationAvailable(Location location) {
        // No mock locations arriving here
    }

    ...
}

onNewLocationAvailable() теперь будет вызываться только с информацией о реальном местоположении. Есть еще несколько методов слушателя, которые вам нужно реализовать, но в контексте вашего вопроса (как предотвратить спуфинг с GPS) это в основном это.

Конечно, с корневой ОС вы все равно можете найти способы информация о спуфинге, которую невозможно обнаружить обычным приложениям.

0
задан gmp 28 February 2019 в 11:00
поделиться