我一直在使用putExtra()创建Intent已经有一段时间了,只是在Android文档中读到我应该在'name'前面加上包名。因此,它应该更像'putExtra(“com.mycompany.myapplication.ButtonText”,“Ok”),而不是'putExtra(“ButtonText”,“Ok”)'。
这真的有必要吗? (没有它似乎没问题)。
如果有必要,有什么好处?
此外,包名称是呼叫者还是被呼叫者?如果是呼叫者,“被叫活动”必须知道呼叫者名称,这不是非常通用的。
由于
答案 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