Intent.setData与Intent.putExtra

时间:2013-09-13 20:14:05

标签: java android api android-intent

我正在尝试按照本教程进行操作:

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

我理解putExtra的作用

但我不明白setData()是什么意思?

Android文档,没什么帮助:

Set the data this intent is operating on.

这对于常数

意味着什么

intent.setData(CalendarContract.Events.CONTENT_URI);

当我注释掉这一行时似乎没有任何影响。

4 个答案:

答案 0 :(得分:37)

setData()用于指向数据对象的位置(例如文件),而putExtra()添加简单数据类型(例如SMS文本字符串)。

以下两个示例澄清:

setData()用于设置您要共享的文件的位置。

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

putExtra()来设置您要共享的文字内容。

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);

有关详细信息,我建议您阅读有关IntentssetData()setType()setDataAndType()

的一些读物

答案 1 :(得分:1)

setData()用于Android系统查找与隐式意图中的数据属性匹配的应用程序组件。

putExtra()主要用于通过Android系统将一些信息传递给选定的应用程序组件。

答案 2 :(得分:0)

我认为.putExtra是传递字符串或其他东西。像Aramex:P

.setData是设置意图的数据类型。

在意图中看到Intent.ACTION_INSERT。所以它正在等待插入的东西。这就是你设置数据的原因。 .setData(CalendarContract.Events.CONTENT_URI);您插入了日历活动。

答案 3 :(得分:0)

我在这里找到了一个很好的答案:https://google-developer-training.gitbooks.io/android-developer-fundamentals-course-concepts/content/en/Unit%201/21_c_understanding_activities_and_intents.html

使用意图数据字段(Intent.setData): -当您只有一条信息时,您需要发送给已开始的活动。 -当该信息是可以用URI表示的数据位置时。

使用额外的意图(Intent.putExtra): -如果您想将多个信息传递给已开始的活动。 -如果您要传递的任何信息都无法用URI表示。

意图数据和附加内容不是排他的;您可以将数据用于URI,并将附加内容用于启动活动处理该URI中的数据所需的任何其他信息。