使用putExtra创建Intent

时间:2011-02-22 22:12:33

标签: android android-intent

我一直在使用putExtra()创建Intent已经有一段时间了,只是在Android文档中读到我应该在'name'前面加上包名。因此,它应该更像'putExtra(“com.mycompany.myapplication.ButtonText”,“Ok”),而不是'putExtra(“ButtonText”,“Ok”)'。

这真的有必要吗? (没有它似乎没问题)。

如果有必要,有什么好处?

此外,包名称是呼叫者还是被呼叫者?如果是呼叫者,“被叫活动”必须知道呼叫者名称,这不是非常通用的。

由于

3 个答案:

答案 0 :(得分:7)

  

这真的有必要吗? (没有它似乎没问题。)

不,对于一个完全独立的应用程序来说,它不是必需的,但无论如何都可能被视为良好的做法。

在公开提供的应用程序中更为重要,因此它们可以进行交互,但保持某种方式来唯一地标识自己和他们正在交换的数据。至于使用哪个包名将取决于上下文。

给出一个抽象的例子......

公司A生产的应用程序可以提供某种数据处理,由B公司和C公司生产的应用程序可以使用。意图的“行动”将被命名为与A公司相关,但两个“客户”应用程序传递给它的数据将被命名为与客户端应用程序公司相关。实施例...

AppA的文档......

To request data processing use:
com.companyA.intent.action.PROCESS_DATA

Pass data with the above intent as an extra named:
<your package name>.SOME_DATA

现在,当使用上述方法调用AppA的相关组件时,它将检查是否存在名称以.SOME_DATA结尾的“额外”,但它也能够将该数据与其他数据分开维护。应用程序由于唯一的前缀。所以......

公司B代码

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyB.SomeApp.SOME_DATA, data);

公司C代码

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyC.SomeOtherApp.SOME_DATA, data);

好吧,可能不是我更好的例子之一,但它归结为重要的是看到Android环境如何非常关于不同的应用程序组件能够相互使用,传递数据和数据的来源是唯一可识别的。

答案 1 :(得分:3)

这听起来更像是“最佳实践”而非实际要求。你在这里获得的好处是,如果你在通用意图中填充了很多东西,这些意图由跨越多个应用程序的多个活动处理,那么你对Intent中的数据更加具体。如果您仅在应用程序内部使用这些意图,并且只有您自己的活动正在处理它们,那么您就可以这样了。

答案 2 :(得分:1)

我认为这是一个很好的想法,如果您将扩展数据包装到可序列化的类中,请说com.mycompany.myapp.MyAppData并将其发送为:

intent.putExtra("com.mycompany.myapp.MyAppData",myAppData); //==> out

并将其检索为:

MyAppData myAppData= (com.mycompany.myapp.MyAppData)intent.getSerializableExtra("com.mycompany.myapp.MyAppData",myAppData; // <== in

JAL