Android LocationListener нет попаданий на местоположение изменилось

У меня есть класс с именем GPStracker, который реализует интерфейс LocationListener.

public class GPSTracker implements LocationListener {
    Context context;
    LocationManager lm;

В конструкторе я установил LocationManager и некоторые настройки (я пропустил часть разрешений):

public GPSTracker(Context c) {
    context = c;

    ... (Permission checking)

    lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
    if(isGPSEnabled){
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 6000, 5, this);
    } else {
        Toast.makeText(context, "Please enable GPS", Toast.LENGTH_SHORT).show();
    }
}

В файле манифеста я установил следующие разрешения для GPS:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

И у меня есть некоторые переопределенные методы, из которых только один имеет некоторую функциональность, метод onLocationChanged:

@Override
public void onLocationChanged(Location location) {
    InspectieOverzicht activity = (InspectieOverzicht) context;
    activity.getFirstFragment().updateDistance(location);
}

Я создаю новый объект GPSTracker в деятельности.

g = new GPSTracker(this);

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

Я даже пытался пройтись вверх и вниз по зданию, где я нахожусь (возможно, это действительно нужно изменить), но это тоже не сработало.

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

Я пробовал это на API 19, 23 и 26 (на эмулируемых устройствах), которые все работали. Я пробовал это на API 23 на реальном устройстве, которое, кажется, не работает.

Кто-нибудь знает, что я здесь делаю не так?

1 ответ

Решение

Используйте оба, иногда сеть предоставляет координаты, если GPS_PROVIDER не работает

  locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, mylistener);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, mylistener);
Другие вопросы по тегам