2011-12-22 13 views
20

Pude haber entendido mal cómo se supone que se usarán los intentos, así que podría estar preguntando algo incorrecto aquí. Si ese es el caso, ayúdenme a seguir el camino correcto con esto de todos modos ...¿Cómo creo un Intento de Android que transmita datos?

Acabo de empezar a trabajar en una aplicación de Android que sondeará mi servidor en busca de mensajes cada cierto tiempo, y cuando aparece 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 mensaje nuevo, el servicio debe dar el mensaje a un Activity que lo muestra.

Para facilitar esta comunicación, que estoy tratando de crear un Intent con ACTION_VIEW, pero no puedo encontrar la manera de dar el mensaje a la actividad. ¿No hay forma de pasar una cadena o un objeto Java común a través del intento?

Por lo que vale la pena, esto es lo que me gustaría hacer:

getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message)); 

pero por supuesto, eso ni siquiera compilar.

+0

¿Está solicitando que el putExtra() sobrecargado pase un par de clave/valor. Más tarde puede acceder a estos datos a través de getExtras() en ese objeto de intento – AxelTheGerman

+0

En lugar de sondear ... si puede, puede intentar enviar mensajes de inserción, el sondeo NUNCA es una buena idea en un teléfono. Pero a veces no tenemos otra opción. – JoxTraex

Respuesta

53

utilizar el paquete de Intención para añadir información adicional, así:

Intent i = new Intent(MessageService.this, ViewMessageActivity.class); 
i.putExtra("name", "value"); 

Y en el lado receptor:

String extra = i.getStringExtra("name"); 

O bien, para conseguir todos los extras como un paquete, independientemente de la tipo:

Bundle b = i.getExtras(); 

Hay varias firmas para el método putExtra() y varios métodos s para obtener los datos según su tipo. Puede ver más aquí: Intent, putExtra.

EDIT: Para pasar sobre un objeto que debe implementar Parcelable o Serializable, por lo que puede utilizar una de las siguientes firmas:

putExtra(String name, Serializable value)

putExtra(String name, Parcelable value)

+1

Esta suele ser la mejor forma de pasar datos a una actividad. Es realmente útil, especialmente desde putExtra() puede tomar un objeto Serializable personalizado. – Krylez

17

Puede hacer lo siguiente para agregar información en el paquete de intención:

Intent i = new Intent(MessageService.this, ViewMessageActivity.class); 
    i.putExtra("message", "value"); 
    startActivity(i); 

Luego, en la actividad se puede recuperar de esta manera:

Bundle extras = getIntent().getExtras(); 
    String message = extras.getString("message"); 
1

Inicio de la actividad de su servicio cada vez que un nuevo mensaje es recibido podría no ser lo que quieres. Por ejemplo, si está viendo una actividad diferente, será interrumpido por el nuevo mensaje.

Puede usar sendBroadcast (intención) junto con un BroadcastReceiver para notificar a una actividad que se ha recibido un mensaje nuevo.

+1

Esto es probablemente lo que terminaré haciendo, pero esto no era lo que necesitaba preguntar en este momento, así que decidí simplificar un poco =) –

Cuestiones relacionadas