2010-01-08 11 views
13

Tengo un servicio en segundo plano ejecutándose y un cliente que interactúa con el servicio.Service call backs to activity in android

Cuando el cliente solicita alguna operación, el servicio la realiza y debe enviar el resultado a la actividad (cliente).

Sé cómo invocar los métodos de servicio en actividad y utilizando las devoluciones de llamada podemos lograr lo que quiero hacer. Pero no puedo entender el mecanismo de devolución de llamada y el ejemplo de código proporcionados en las demostraciones Api (servicio remoto).

¿Podría alguien explicar cómo funciona la devolución de llamada de este servicio? o cualquier cosa que se pueda lograr usando un mecanismo más simple.

Respuesta

5

Aquí está el flujo
Crea tu intención de llamar a un servicio. Puede startService() o BindService() con BIND_AUTO_CREATE

vez que el servicio es un enlace, se creará un túnel para hablar con clientes lo que es el IBinder interfaz. Esto es usado por su aplicación AIDL interfaz y devolver el IBinder en

private final MyServiceInterface.Stub mBinder = new MyServiceInterface.Stub() { 
    public int getNumber() { 
     return new Random().nextInt(100); 
    } 
}; 

public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    Toast.makeText(this, "Service OnBind()", Toast.LENGTH_LONG).show(); 
    return mBinder; 
} 

Una vez que se devuelve el mBinder, ServiceConnection que creó en el cliente devolverá la llamada y obtendrá la interfaz de servicio a través de este

  mConnection = new ServiceConnection() { 

     public void onServiceDisconnected(ComponentName name) { 
      // TODO Auto-generated method stub 

     } 

     public void onServiceConnected(ComponentName name, IBinder service) { 
      // TODO Auto-generated method stub 

      mService = MyServiceInterface.Stub.asInterface(service); 


    }; 

Ahora usted tiene la interfaz mService llamar y retreive cualquier servicio de ese

+3

cómo conseguir devolver la llamada de servicio a la actividad? –