使用putExtra创建Intent

ste*_*eve 5 android android-intent

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

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

如果有必要有什么好处?

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

谢谢

Squ*_*onk 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
Run Code Online (Sandbox Code Playgroud)

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

公司B代码

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyB.SomeApp.SOME_DATA, data);
Run Code Online (Sandbox Code Playgroud)

公司C代码

Intent i = new Intent(com.companyA.intent.action.PROCESS_DATA);
i.putExtra(com.companyC.SomeOtherApp.SOME_DATA, data);
Run Code Online (Sandbox Code Playgroud)

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