2011-12-22 16 views
20

Potrei aver frainteso come dovrebbero essere usati gli intenti, quindi potrei chiedere la cosa sbagliata qui. Se è così, ti prego di aiutarmi a seguire la strada giusta con questo comunque ...Come posso creare un intent Android che trasporta dati?

Ho appena iniziato a lavorare su un'app per Android che invierà messaggi al mio server ogni tanto, e quando un nuovo messaggio è disponibile, voglio mostrarlo all'utente. Sto cercando di implementarlo avendo uno Service che interroga il server, e quando viene ricevuto un nuovo messaggio il servizio dovrebbe dare il messaggio a uno Activity che lo mostra.

Per facilitare questa comunicazione, sto cercando di creare un Intent con ACTION_VIEW, ma non riesco a capire come dare il messaggio all'attività. Non c'è modo di passare una stringa o un normale oggetto Java tramite l'intento?

Per quel che vale, questo è quello che mi piacerebbe fare:

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

ma, naturalmente, che non ha nemmeno la compilazione.

+0

si sta lokking per il sovraccarico putExtra() per passare una coppia chiave/valore. In seguito è possibile accedere a questi dati tramite getExtras() su tale oggetto intent – AxelTheGerman

+0

Invece del polling ... se è possibile, si consiglia di provare a inviare messaggi push, il polling non è MAI una buona idea su un telefono. Ma a volte non abbiamo altra opzione. – JoxTraex

risposta

53

Utilizzare il fascio intenti per aggiungere informazioni supplementari, in questo modo:

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

E sul lato ricevente:

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

Oppure, per ottenere tutti gli extra come un fascio, indipendentemente dalla tipo:

Bundle b = i.getExtras(); 

ci sono varie firme per il metodo e il metodo putExtra() vari s per ottenere i dati in base al tipo. Potete vedere di più qui: Intent, putExtra.

EDIT: di trasmettere un oggetto deve implementare Parcelable o Serializable, in modo da poter utilizzare uno dei seguenti firme:

putExtra(String name, Serializable value)

putExtra(String name, Parcelable value)

+1

Questo è in genere il modo migliore per passare i dati a un'attività. È davvero utile soprattutto dal momento che putExtra() può prendere un oggetto Serializable personalizzato. – Krylez

17

È possibile effettuare le seguenti operazioni per aggiungere informazioni nel pacchetto di intenti:

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

Poi nell'attività è possibile recuperare in questo modo:

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

partire l'attività dal vostro servizio ogni volta che un nuovo messaggio viene ricevuto potrebbe non essere ciò che si desidera. Ad esempio, se stai visualizzando un'attività diversa, verrai interrotto dal nuovo messaggio.

È possibile utilizzare sendBroadcast (intento) insieme a un BroadcastReceiver per notificare a un'attività che è stato ricevuto un nuovo messaggio.

+1

Questo è probabilmente quello che finirò per fare, ma questo non era quello che dovevo chiedere in questo momento, quindi ho deciso di semplificare un po '=) –

Problemi correlati