На Android, как мне создать класс, который расширяет Location Listener, чтобы и моя основная деятельность, и Intent Service могли использовать один и тот же объект? - PullRequest
1 голос
/ 07 марта 2012

Так что я планирую создать приложение, которое должно получить местоположение пользователя, и у него будет класс с именем LocationController, который реализует интерфейс LocationListener.

Чего я хочу добиться, так это того, чтобы как только было запущено основное действие (на данный момент называется MainActivity) (в его методе onCreate), чтобы вызвать мой объект LocationController и запустить егополучение исправлений и обновлений местоположения.

Однако мне также необходимо реализовать IntentService или Service, которые будут продолжать работать даже после завершения основного действия (т. е. с именами onPause и или onStop) и этой службы.необходимо получить доступ к тому же объекту LocationController, который было запущено основным действием в методе onCreate, чтобы получить некоторые показания местоположения.

Теперь я потратил некоторое время на изучение того, как передавать данные издеятельность службы и просмотрели объекты Serializable, Bundle и Parcel, и ни один из них не может передать объекты LocationListener или Location, так что для меня это не большая возможность (если я что-то пропустил, в которойслучай, я открыт для предложений).

Другой вариант, о котором я подумал, был, возможно, со статическими объектами.По сути, LocationController должен быть статическим классом, чтобы MainActivity мог вызывать его методы, чтобы начать получать исправления местоположения, но так, чтобы он также продолжал существовать даже после завершения MainActivity.Тем не менее, я все еще не знаю, как это сделать.Например, я делаю весь LocationController статическим объектом или некоторые его методы статическими?

Может кто-нибудь помочь мне с этим?

ОБНОВЛЕНИЕ :

Итак, я принял совет Кабуко и написал следующее по основному классу деятельности:

public void setLocationController() {
    if (locationController == null)
        this.locationController = new LocationController(this);
}

и

public static LocationController getLocationController() {
    // make sure to have called setLocationController() early in your
    // activity's life. onCreate is a good place
    return this.locationController;
}

, которые устанавливаютa создает Singleton, но для доступа к контроллеру местоположения в моем классе IntentService (назовите его MyService) я получил доступ к контроллеру местоположения как статический член основного класса активности, например:

public class MyService extends IntentService {
    private LocationController locationController = null;

    public MyService() {
      super("MyService");
      locationController = MainActivity.getLocationController();
      ...
    }

....

}   // end of class

Ответы [ 2 ]

1 голос
/ 07 марта 2012

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

1 голос
/ 07 марта 2012

Вы можете сделать одноэлементный экземпляр вашего класса LocationController, который по сути "делает весь ваш LocationController статическим объектом". Просто имейте в виду, что, когда ваша деятельность остановлена, ваш сервис поддерживает работу вашего приложения. Если вы хотите, чтобы он работал долго и обрабатывал несколько «задач», вы можете быть осторожны с IntentService, который отключается, когда он не работает (возможно, убивает ваше приложение и ваш синглтон).

...