Android — GPS-прослушиватель

#android #gps

#Android #gps

Вопрос:

Я разрабатываю приложение для Android, которое состоит из нескольких действий. Я хочу получать обновления от GPS ( onLocationChanged , onProviderDisabled , onProviderEnabled onStatusChanged , , , , независимо от того, в какой деятельности пользователь в данный момент использует.

Где я должен реализовать LocationListener , чтобы получить такое поведение?

Это класс, который я создал:

 public class MyLocationListener implements LocationListener{

private LocationManager locationManager;
private String provider;

    @Override
public void onLocationChanged(Location locationGPS) {

    //do something
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String provider) {
    Log.i("===========================", "==============================");
    Log.i("onProviderEnabled", "==============================");
    Log.i("===========================", "==============================");

}

@Override
public void onProviderDisabled(String provider) {

    Log.i("===========================", "==============================");
    Log.i("onProviderDisabled", "==============================");
    Log.i("===========================", "==============================");
}
  

Ответ №1:

Запустите прослушиватель местоположения для действия, которое вы хотите запустить с помощью gps. Для запуска GPS вы можете использовать

 LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new CTLocationListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 1.0f, locationListener);
  

и чтобы остановить GPS, вы можете использовать

 locationManager.removeUpdates(locationListener);
  

Лучше, чтобы вы записали запуск GPS в onCreate() / onStart() и удаление GPS в onDestroy() службе и использовали эту службу. В противном случае, как только вы остановите GPS, вероятность повторного запуска GPS на некоторых устройствах составляет менее 50%.

Комментарии:

1. Мне нужны данные от GPS во всех действиях.

2. @Udi I — Вы будете получать обновления местоположения в LocationListener всякий раз, когда происходит изменение местоположения в «onLocationChanged». Для этого вы должны создать класс, скажем, GPSListener, который реализует LocationListener и реализует методы переопределения.

Ответ №2:

Создайте Service и отслеживайте местоположение там, или вы можете реализовать LocationListener в отдельном классе и использовать его в каждом Activity , включая onResume() и завершая работу onPause()

Комментарии:

1. Я пробовал этот подход, но получаю следующую ошибку: «Не удается создать обработчик внутри потока, который не вызывал Looper.prepare()»

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