2010-06-19 15 views
8

estoy un poco atascado con los servicios remotos en Android. Lo que sucede es que implementé un servicio remoto en el paquete "a.b.c.c." y quiero que otras aplicaciones puedan acceder a este servicio. Me deshice de toda la mierda de ayuda y diseñé la "interfaz" del servicio para trabajar a través de intenciones transmitidas. funciona bien hasta ahora ...¿cómo comienzo (y enlazo) un servicio remoto en Android que se implementa en otra aplicación (paquete diferente)?

problema es: ¿cómo obtengo una aplicación different (paquete diferente, proyecto diferente, tal vez incluso un desarrollador diferente, ...) para iniciar/detener el servicio?

package d.e.f; 

import a.b.c.*; 

public class main extends Activity { 
    protected ImyService myService; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Intent intent = new Intent(ImyService.class.getName()); 
     bindService(intent, sConnection, Context.BIND_AUTO_CREATE); 
    } 

    protected ServiceConnection sConnection = new ServiceConnection() { 
     public void onServiceConnected(ComponentName className, IBinder binder) { 
      wlService = ImyService.Stub.asInterface(binder); 
      ServiceConnected = true; 
      Toast.makeText(main.this, "service connected", Toast.LENGTH_SHORT).show(); 
     } 

     public void onServiceDisconnected(ComponentName className) { 
      wlService = null; 
      ServiceConnected = false; 
      Toast.makeText(main.this, "service disconnected", Toast.LENGTH_SHORT).show(); 
     } 
    }; 
} 

Esto bloqueará mi aplicación inmediatamente al inicio. ¿qué hice mal? ¿Cómo haré que esto funcione?

una vez que se está ejecutando, los comandos y los datos se transmitirán a través de difusiones. entonces eso no debería ser un problema real ...

Respuesta

20

Paso # 1: Configure un <intent-filter> para su <service> con una cadena <action>.

Paso # 2: Use esa cadena de acción para la Intent utiliza con bindService() (por ejemplo, new Intent("this.is.my.custom.ACTION"))

+0

funciona bastante bien para mí! – Ben

+3

@JPM: ver https://github.com/commonsguy/cw-advandroid/blob/master/AdvServices/RemoteService/AndroidManifest.xml – CommonsWare

+0

Lol, es tan simple ... pero genio. No sabía que podrías hacer eso, gracias – JPM

Cuestiones relacionadas