web-dev-qa-db-fra.com

Comment créer un Android Intention qui transporte des données?

J'ai peut-être mal compris comment les intentions sont censées être utilisées, alors je peux demander la mauvaise chose ici. Si tel est le cas, aidez-moi de toute façon à me mettre sur la bonne voie ...

Je viens de commencer à travailler sur une application Android qui interrogera mon serveur régulièrement pour les messages, et lorsqu'un nouveau message est disponible, je veux le montrer à l'utilisateur. Je suis essayer d'implémenter cela en ayant un Service qui interroge le serveur, et quand un nouveau message est reçu, le service doit transmettre le message à un Activity qui l'affiche.

Pour faciliter cette communication, j'essaie de créer un Intent avec ACTION_VIEW, mais je ne sais pas comment transmettre le message à l'activité. N'y a-t-il aucun moyen de passer une chaîne ou un objet Java normal via l'intention?)

Pour ce que ça vaut, voici ce que j'aimerais faire:

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

mais bien sûr, cela ne compile même pas.

28
Tomas Aschan

Utilisez le pack Intent pour ajouter des informations supplémentaires, comme ceci:

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

Et côté réception:

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

Ou, pour obtenir tous les extras sous forme de bundle, indépendamment du type:

Bundle b = i.getExtras();

Il existe différentes signatures pour la méthode putExtra() et diverses méthodes pour obtenir les données en fonction de son type. Vous pouvez en voir plus ici: Intent , putExtra .

EDIT: Pour transmettre un objet, il doit implémenter Parcelable ou Serializable , vous pouvez donc utiliser l'une des signatures suivantes:

putExtra (nom de chaîne, valeur sérialisable)

putExtra (nom de chaîne, valeur parcelable)

64
Telmo Marques

Vous pouvez effectuer les opérations suivantes pour ajouter des informations dans l'ensemble d'intentions:

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

Ensuite, dans l'activité, vous pouvez récupérer comme ceci:

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

Le démarrage de l'activité à partir de votre service chaque fois qu'un nouveau message est reçu n'est peut-être pas ce que vous voulez. Par exemple, si vous visualisez une activité différente, vous serez interrompu par le nouveau message.

Vous pouvez utiliser sendBroadcast (intention) avec un BroadcastReceiver pour notifier une activité qu'un nouveau message a été reçu.

1
benkdev