Кодовое имя одно приложение не обеспечивает реальное местоположение - PullRequest
1 голос
/ 24 апреля 2020

в нашем приложении есть модуль, куда вы можете отправлять записи времени с местоположением GPS.

В 40% случаев у нас есть проблема с местоположением, поскольку модуль предоставляет местоположение, которое не является реальным (иногда около 1 км. прочь).

Когда у нас есть такие случаи, мы открываем приложение Google Maps, и оно дает нам идеальное местоположение, затем снова выводим приложение и нереальное местоположение.

Для получения местоположения мы используем это:

Slider s1 = new Slider();
Dialog dlg = makeDialog("HIGH PRECISION LOCATION...", s1, null, 'a');
dlg.addShowListener((ActionListener) e -> {

    LocationManager locationManager = LocationManager.getLocationManager();                
    locationManager.setLocationListener(this, new LocationRequest(LocationRequest.PRIORITY_HIGH_ACCUARCY, 500));

    loc = locationManager.getCurrentLocationSync(20000);

    dlg.dispose();
    if(loc == null) {
        Slider s2 = new Slider();
        Dialog dlg2 = makeDialog("GETTING LAST KNOWN LOCATION...", s2, "OK", 'a');
        dlg2.addShowListener((ActionListener) e2 -> {
            loc = locationManager.getLastKnownLocation();

            if(loc == null) {
                // location not found
                Dialog.show("Attenzione!", "Posizione non trovata. E' consigliato di spostarsi all'aperto. "
                        + "Tuttavia è possibile inviare la timbratura anche senza coordinate.", "Ok", null);
            } else {
                paintLocation(loc, GPSStateOn);
            }
        });
        dlg2.show();
    } else {
        paintLocation(loc, GPSStateOn);
    }

});
dlg.show();

-

@Override
public void locationUpdated(final Location location) {

    switch (LocationManager.getLocationManager().getStatus()) {
        case LocationManager.AVAILABLE:
            GPSStateOn = true;
            break;
        case LocationManager.OUT_OF_SERVICE:
            GPSStateOn = false;
            break;                
        case LocationManager.TEMPORARILY_UNAVAILABLE:
            GPSStateOn = false;                 
            break;                
    }

    if(loc != null) {
        paintLocation(loc,GPSStateOn);
        System.out.println("-----LATITUDINE: " + loc.getLatitude());
        System.out.println("-----LONGITUDINE: " + loc.getLongitude());
    }
}

Мы также добавили подсказку для сборки android.playService.location = true


ДОБАВЛЕНО 25/04/2020 11:58 Я забыл сказать, что примерно в 40% случаев он прибывает в "ПОЛУЧЕНИЕ ПОСЛЕДНЕГО ИЗВЕСТНОГО МЕСТОПОЛОЖЕНИЯ ...", а затем дает идеальное реальное местоположение. Android советы по сборке: enter image description here

последний вырезан ... значение:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><uses-feature         android:glEsVersion="0x00020000"         android:required="true"/><uses-permission android:name="android.permission.CAMERA"/><uses-feature android:name="android.hardware.camera" android:required="false"/>


ДОБАВЛЕНО 06/05/2020 10: 48

Может быть, это может быть полезно: я заметил, что когда местоположение занимает много времени, значок GPS не отображается на верхней панели enter image description here

И когда требуется меньше времени, появляется значок GPS enter image description here

1 Ответ

0 голосов
/ 27 апреля 2020

Снова посмотрев на код, я заметил, что вы использовали прослушиватель set location и getCurrentLocationSync, которые в данном случае являются взаимоисключающими. Вам нужно выбрать один. Если вы дадите первому (что является предпочтительным способом) достаточно времени для работы, это должно дать вам точное местоположение. Обратите внимание, что для начального считывания позиции GPS иногда требуется пара секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...