#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. Что ж, вам нужно будет показать некоторый код. Похоже, что вы запрашиваете обновления местоположения из потока, запущенного вручную.