web-dev-qa-db-fra.com

Intent.setData vs Intent.putExtra

J'essaie de suivre ce tutoriel:

http://www.vogella.com/articles/AndroidCalendar/article.html

Je comprends ce que putExtra fait

mais je n'arrive pas à comprendre ce que setData () signifie?

Android Docs, n'était pas très utile:

Set the data this intent is operating on.

qu'est-ce que cela signifie pour la constante

intent.setData(CalendarContract.Events.CONTENT_URI);?

Il ne semble y avoir aucun effet lorsque je commente cette ligne.

25
Elad Benda

setData() est utilisé pour pointer sur le location d'un objet de données (comme un fichier, par exemple), alors que putExtra() ajoute types de données simples (tel qu'une chaîne de texte SMS par exemple).

Voici deux exemples à clarifier:

setData() utilisé ici pour définir l'emplacement d'un fichier que vous souhaitez partager.

File fileToShare = new File("/sdcard/somefile.dat");
Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
i.setData(Uri.fromFile(fileToShare));
startActivity(i);

putExtra() est utilisé ici pour définir le contenu de texte que vous souhaitez partager.

Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
String textBodyString = "some text";
i.putExtra(Intent.EXTRA_TEXT, textBodyString);
i.setType(HTTP.PLAIN_TEXT_TYPE);

Pour plus d'informations, je suggère quelques lectures sur Intentions et les fonctions setData(), setType() et setDataAndType()

37
Alex.F

setData () est utilisé par le système Android pour trouver un composant d'application correspondant à l'attribut de données dans une intention implicite.


putExtra () est principalement utilisé pour transmettre des informations au composant d'application sélectionné, par le système Android.

1
Henok Tesfaye

J'ai trouvé une bonne réponse ici: https://google-developer-training.gitbooks.io/Android-developer-fundamentals-course-concepts/content/fr/Unit%201/21_c_understanding_activities_and_intents.html

Utilisez le champ de données d'intention (Intent.setData): - Lorsque vous ne devez envoyer qu'une information à l'activité démarrée .- Lorsque cette information est un emplacement de données pouvant être représenté par un URI .

Utilisez les extras d’intention (Intent.putExtra): - Si vous souhaitez transmettre plusieurs informations à l’activité démarrée .- Si l’une des informations que vous souhaitez transmettre ne peut pas être exprimée par un URI.

Les données d'intention et les extras ne sont pas exclusifs; vous pouvez utiliser des données pour un URI et des extras pour toute information supplémentaire dont l'activité démarrée a besoin pour traiter les données dans cet URI.

0
Daniel

Je pense que .putExtra est de transférer une chaîne ou quelque chose. comme Aramex: P

tandis que .setData définit le type de données de l’intention.

voir dans l'intention c'est Intent.ACTION_INSERT. Donc, il attend que quelque chose soit inséré. C'est pourquoi vous définissez les données. .setData(CalendarContract.Events.CONTENT_URI); Vous avez inséré les événements de calendrier.

0
Ahmed Ekri