android - 是不是可以使用私有意图而不是全局意图?

Posted

技术标签:

【中文标题】android - 是不是可以使用私有意图而不是全局意图?【英文标题】:android - is it possible to use private intents instead of global ones?android - 是否可以使用私有意图而不是全局意图? 【发布时间】:2012-04-02 00:48:59 【问题描述】:

背景: 我注意到对于其中的常规活动,任何应用程序都可以打开我的应用程序的活动。

问题: 是否可以只允许我自己的应用程序(或应用程序或包)在同一范围内发送和接收意图,以便其他应用程序无法接收它们或干扰应用程序的流程?

示例: 假设我有一个广播接收器,它监听某种意图,但这个意图只意味着由驻留在我的应用程序内或我创建的另一个应用程序内的另一个服务/活动使用,但我不想要其他人能够使用此意图。

请帮帮我。

【问题讨论】:

【参考方案1】:

setPackage()

设置一个明确的应用程序包名称,以限制此 Intent 将解析到的组件。如果保留默认值 null,则将考虑所有应用程序中的所有组件。如果非空,则 Intent 只能匹配给定应用程序包中的组件。

或者您可以使用 setSelector() ,但不能同时使用两者。

【讨论】:

我应该什么时候使用它们,使用它们的优缺点是什么? 另外,如何限制我的应用程序的活动,使它们无法从另一个应用程序启动?也许清单中有一些东西? 请read this first。我能想到的一种方法是检查额外的。有点像令牌,如果传递的令牌是您期望的令牌:启动活动。 你的意思是我设置了某种密码机制,在启动活动的 onCreate() 方法上进行检查?我希望有一个简单的清单解决方案。确定没有这种事?【参考方案2】:

假设我有一个广播接收器来侦听某种意图,但这个意图只打算由驻留在我的应用程序内或我创建的另一个应用程序内的另一个服务/活动使用,但我没有'不希望其他人能够使用此意图。

除了 Reno 的最佳答案外,对于您上面引用的特定要求,请使用 LocalBroadcastManager。您不仅可以获得所需的安全性,而且效率更高。 LocalBroadcastManagerandroid 支持包中可用,AFAIK 应该可以追溯到 Android 1.6。 Here is a sample project 使用 LocalBroadcastManager

【讨论】:

您能多说一些吗?怎么会更快?它是如何工作的?就像直接发送对象一样吗?如果是这样,是否还建议在活动和服务之间发送快速(高频)数据?

以上是关于android - 是不是可以使用私有意图而不是全局意图?的主要内容,如果未能解决你的问题,请参考以下文章

android 的默认图库和相机意图是不是适用于所有设备?

图库意图仅显示图像或视频而不是两者?

Android - 在活动重新创建期间是不是保留了意图?

如何解决android电子邮件意图问题?

使用 android 意图在特定时间打开 youtube 视频

使用 android 意图将 html 文件作为电子邮件正文内容发送