Intent :: putExtra()和EXTRA_MESSAGE =“com.example.myfirstapp.MESSAGE”;

时间:2012-08-15 19:50:34

标签: android android-intent

我的代码为follows:

首先,我想知道第20行

我有两个问题:

一个。为什么 MY_MESSAGE 分配给 com.example.myfirstapp.MESSAGE ? 湾什么是 com.example.myfirstapp.MESSAGE ? C。我在任何地方都做过MESSAGE;这是自动制作的,就像r.java文件中的变量一样,还是我需要在某个地方制作?

其次,关于第40行:intent.putExtra(EXTRA_MESSAGE,message);

我不确定这个方法是否会为即将要调用的活动添加消息或者是什么......部分由于不完全了解Intent的意义,我很难理解这一点。 我想阅读我关于一切内容的200个基本部分,但我已设定截止日期,并且我被告知暂时不要采用这种方法进行此项目

在给出Android Docs的解释后,我知道其意图是:

  

Intent 本身是一个Intent对象,是一个被动数据结构,包含要执行的操作的抽象描述

A。)有人可以解释一下这个意图的用途,或者提供一些比文档更好的快速文章吗?

B.)解释putExtra()的作用以及这些参数更清楚:

  • name包含前缀的额外数据的名称。
  • value String数组数据值

3 个答案:

答案 0 :(得分:6)

Intent被恰当地命名;这就是你想要做的。正如the documentation所说:

  

其最重要的用途是开展活动,可以将其视为活动之间的粘合剂。它基本上是一个被动数据结构,包含要执行的动作的抽象描述。

根据您的代码,您熟悉通过Activity

开始Intent
new Intent(this, DisplayMessageActivity.class);

这会使用您当前的Activity作为启动Intent的上下文,并提供要启动的目标类。我想你已经知道了。基本上,Intent只是Android设备可以遵循的指南,因此它可以使用正确的信息启动正确的目标。

在您真正的问题上:

  1. “用途是什么意思?”这在上面描述;基本上,它用于告诉操作系统你的目标是什么,它来自哪里,以及它应该提供什么数据。你已经看到了大部分的事情没有意识到; this constructor是你一直在使用的那个,详细说明了“from”和“to”部分。当您使用putExtra时,您向Intent提供了可以为代码的“至”部分提供的数据。
  2. name参数最好由文档总结:“额外数据的名称,带包前缀。”这就像HashMap中的一个关键词;它是您要打包的内容的字符串标识符。他们告诉你使用你的包的前缀,只是为了防止混淆。在您的情况下,您应该使用“com.SG.Three_Piece_Radio.YOURKEYNAME”;这不必在任何地方声明,也不是常数。只是一个字符串。该值只是额外内容(数据);这可能是很多不同的事情 - shortintStringParcelable等等。 (这些都可以在the Intent docs中的各种putExtra中找到。)
  3. 收到Intent后,您可以使用相同的数据位(例如String myStr = getIntent().getStringExtra("com.SG.Three_Piece_Radio.YOURKEYNAME");),并在您调用的Activity中随意执行任何操作。

答案 1 :(得分:3)

意图最常见的用途是在应用程序中启动新活动(屏幕)(第41行)。附加组件Bundle是一种在活动之间传递数据的方法。额外输入作为键值对输入,因此EXTRA_MESSAGE是一个用于标识特定值的键,以便其他活动可以检索和使用它。

答案 2 :(得分:3)

我认为人们在这里对Intent本身及其目的作出了很好的解释。我从这些答案中学到了很多东西。

然而,我认为还有一个小方面需要更多解释。

所以回答你的第一个问题: -

  

一个。为什么将MY_MESSAGE分配给com.example.myfirstapp.MESSAGE?湾什么是com.example.myfirstapp.MESSAGE? C。我在任何地方都做过MESSAGE;这是自动制作的,就像r.java文件中的变量一样,还是我需要在某个地方制作?

我的回答是: -

因此,正如所有解释的那样,putExtra用于携带额外的信息/数据以及将要开始的新活动的意图。 putExtra携带的这些附加信息在Intent中以Key-Value对的形式给出。 在此Key-Value对中,Key语法总是必须是String。 在您的情况下,该值也是一个字符串,“键”可以是任何随机字符串。 现在,为了确保系统不会将KEY与其他应用程序的KEY混淆,您应该始终将字符串的整个数据包结构与其一起附加。因此你使用: -

  

com.example.myfirstapp.MESSAGE

其中 MESSAGE 实际上是键的名称(如上所述,所需的字符串),它将与将意图传递给新字符串的字符串值相关联活动。

现在你也可以写好以下内容: -

intent.putExtra("com.example.myfirstapp.MESSAGE", message);

而不是: -

  

intent.putExtra( EXTRA_MESSAGE,消息);

但是这会降低代码的灵活性,以便稍后进行更改。至于密钥名称的任何更改,您将不得不在任何地方进行更改。因此,为了避免这种情况,我们宁愿将键的名称(在您的情况下, MESSAGE )分配给String变量(在您的情况下为 EXTRA_MESSAGE )。

这也使其他活动更容易通过简单的String变量引用此键。因此,为了使其可以访问其他活动(加上其他自我解释的功能),您可以将其设为: -

public final static 字符串EXTRA_MESSAGE =“com.example.myfirstapp.MESSAGE”;

如果我碰巧在某处错过了某些地方或出了问题,请纠正我。