Как я могу уведомить деятельность о завершении обслуживания? - PullRequest
1 голос
/ 15 июля 2011

У меня есть активность под названием message.java, которая связана с сервисом GPS.java. Широта и долгота, полученные из GPS.java, должны использоваться в message.java. Мы получаем значения по умолчанию широты и долготы в onServiceConnected () с помощью servicebinder. Вот код для сообщения. Java

`Intent i=new Intent(getApplicationContext(), GPS.class);
             bindService(i,mConnection,Context.BIND_AUTO_CREATE)




       private GPS servicebinder;
       ServiceConnection mConnection = new ServiceConnection() {
            public void onServiceConnected(ComponentName className, IBinder service) {
                servicebinder = ((GPS.MyBinder)service).getService();

                double lat=servicebinder.getlatitude();

                double lon=servicebinder.getlongitude();
                  tex.setText("\nlatitude: " + lat+ "\nlongitude: "
                        + lon);


              // do any extra setup that requires your Service
              }

getLatitude () и getLongitude () возвращают широту и долготу, найденные в GPS.java, которые являются правильными. Проблема в том, что широта и долгота, показанные выше, распечатывает значения по умолчанию, поэтому, когда широта и долгота в сервисе обновляются, я хочу, чтобы широта и долгота также должны были обновляться (активность должна быть уведомлена об обновлении сервиса)

Пожалуйста, дайте код для правильного размещения

1 Ответ

0 голосов
/ 15 июля 2011

Сначала создайте интерфейс наподобие MyLocationListener, как показано ниже

public interface MyLocationListener {
  public void locationChanged(double lat, double lon);
}

Теперь обновите класс GPS как

public class GPS {
  ArrayList<MyLocationListener> listeners = new ArrayList<MyLocationListener>();

  public void addLocationListener(MyLocationListener listener) {
    listeners.add(listener);
  }
}

Итак, где вы изменили широту или долготу, просто вызов

notifyChangeLocation(lat, lon);

и этот метод имеет следующий код:

public void notifyChangeLocation(double lat, double lon) {
Iterator<MyLocationListener> itr = listeners.iterator();
  while(itr.hasNext()) {
    itr.next().locationChanged(lat, lon);
  }
}

Это первая часть, теперь второе - добавить слушателя в вашу деятельность, создав класс MyServiceConnection что похоже на:

public class MyServiceConnection implements ServiceConnection, MyLocationListener {
  //add the unimplemented methods
  public void locationChanged(double lat, double lon) {
    // do any extra setup that requires your Service
  }
}
ServiceConnection mConnection = new MyServiceConnection();
Intent i=new Intent(getApplicationContext(), GPS.class);
bindService(i,mConnection,Context.BIND_AUTO_CREATE);

Теперь просто зарегистрируйте слушателя gps.addLocationListener(mConnection);

...