putextra - intentfilter android
¿Cómo creo una intención de Android que lleva datos? (3)
Iniciar la actividad desde su servicio cada vez que se recibe un nuevo mensaje puede no ser lo que desea. Por ejemplo, si está viendo una actividad diferente, el nuevo mensaje lo interrumpirá.
Puede usar sendBroadcast (intención) junto con un BroadcastReceiver para notificar a una actividad que se ha recibido un nuevo mensaje.
Podría haber entendido mal cómo se supone que se usan los propósitos, por lo que podría estar preguntando algo incorrecto aquí. Si ese es el caso, ayúdame a encontrar el camino correcto con esto de todos modos ...
Acabo de comenzar a trabajar en una aplicación de Android que sondeará mi servidor en busca de mensajes de vez en cuando, y cuando haya un nuevo mensaje disponible, quiero mostrarlo al usuario. Estoy tratando de implementar esto teniendo un Service
que sondea el servidor, y cuando se recibe un nuevo mensaje, el servicio debe enviar el mensaje a una Activity
que lo muestre.
Para facilitar esta comunicación, estoy tratando de crear una Intent
con ACTION_VIEW
, pero no puedo averiguar cómo dar el mensaje a la actividad. ¿No hay forma de pasar una cadena o un objeto Java normal a través de la intención?
Para lo que vale, esto es lo que me gustaría hacer:
getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message));
Pero claro, eso ni siquiera compila.
Puede hacer lo siguiente para agregar información al paquete de intenciones:
Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
i.putExtra("message", "value");
startActivity(i);
Luego en la actividad puedes recuperar así:
Bundle extras = getIntent().getExtras();
String message = extras.getString("message");
Utilice el paquete Intent para agregar información adicional, como por ejemplo:
Intent i = new Intent(MessageService.this, ViewMessageActivity.class);
i.putExtra("name", "value");
Y en el lado receptor:
String extra = i.getStringExtra("name");
O, para obtener todos los extras como un paquete, independientemente del tipo:
Bundle b = i.getExtras();
Existen varias firmas para el método putExtra()
y varios métodos para obtener los datos según su tipo. Puedes ver más aquí: Intent , putExtra .
EDITAR: Para pasar un objeto, debe implementar Parcelable o Serializable , para que pueda usar una de las siguientes firmas: