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.
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:
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");
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.