2010-02-12 13 views

Respuesta

24

Puede llamar StartService (Intención) así:

MyObject obj = new MyObject(); 
Intent intent = new Intent(this, MyService.class); 
intent.putExtra("object", obj); 
startService(intent); 

El objeto que desea enviar debe implementar parcelable (se puede hacer referencia a esta Percelable guide)

class MyObject extends Object implements Parcelable { 

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     // TODO Auto-generated method stub 

    } 

} 

y con el servicio, en el onStart método() o onStartCommand() para el nivel 5 de la API y la más reciente, puede obtener el objeto:

MyObject obj = intent.getParcelableExtra("object"); 

Eso es todo :)

+0

¿Cómo envío más de un solo valor de datos al paquete? Tengo dos cadenas que necesito enviar. – jax

+0

intent.putExtra ("my.first.string", "algo"); intent.putExtra ("my.second.string", "algo más"); – hackbod

+0

Esto todavía no funciona para mí. He hecho todo lo anterior pero sigo teniendo problemas. ¿Cómo debo pasar el estado completo del objeto a través de Parcelable? Sé que puedo enviar tipos básicos como String y Arrays pero por objeto contiene clases más complejas que solo estas. – jax

1

Como Bino Dicho esto, es necesario tener el objeto personalizado implementa la interfaz parcelable si quieres pasarlo a un servicio a través de una intención. Esto hará que el objeto sea "serializable" en un sentido de Android IPC para que pueda pasarlos a la llamada putExtra (String, Parcelable) del objeto de Intent.

Para los tipos primitivos simples, ya hay un montón de métodos setExtra (String, primitive type). Sin embargo, como te entiendo, esta no es una opción para ti, por lo que deberías ir por un paquete.

8

Si no desea implementar parcelable y su objeto es serializable

uso de este

En el remitente activiy

Intent intent = new Intent(activity, MyActivity.class); 

Bundle bundle = new Bundle(); 
bundle.putSerializable("my object", myObject); 

intent.putExtras(bundle); 

startActivity(intent); 

En el receptor:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object"); 

Funciona bien para mí pruébalo. Pero el objeto debe ser serializable :)

+0

Para mí si funcionó, pero tuve que cambiar algo, en la parte emisora: 'intent.putExtra (" objeto pasado ", bundle.getSerializable (" mi objeto "));' Y en la parte receptora: 'myObject = (MyObject) intent.getExtras(). GetSerializable (" objeto pasado ");' – Ruocco

Cuestiones relacionadas