Android环境中不同应用程序之间的显式意图有什么用?

时间:2014-10-23 02:10:41

标签: android security android-intent permissions

讨论Android安全提出的一个问题,我们找不到合理的答案(也许是天真的问题):

  1. 为什么Android应用程序会声明一个活动/接收器/服务 没有intent-filter和标签的清单 出口=真的吗?
  2. 另一个应用程序如何发送显式意图 到上面声明的接收器?请给出一个代码示例if 可能。
  3. 对此有何影响?
  4. 在Application Manifest上找到的示例: package =“com.google.android.youtube” 应用程序:android:name =“com.google.android.apps.youtube.app.YouTubeApplication” Receiver:android:name =“com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14 $ RemoteControlIntentReceiver” 机器人:导出= “真”

1 个答案:

答案 0 :(得分:2)

您给出的示例的解释非常简单。您给出的示例是BroadcastReceiver组件。该组件具有android:exported="true",因此可以从应用程序外部的其他组件调用它。这种用法的一个很好的例子是AlarmManager。如果应用程序要使用AlarmManager设置闹钟,则AlarmManager在闹钟响起时调用的组件必须公开。原因是AlarmManager必须能够启动组件,即使您的应用程序没有运行。要做到这一点,组件必须在清单中声明,并且必须是公开可用的(即:“android:exported =”true“)。

通常,只要您的应用程序创建显式Intent,然后将此Intent(使用PendingIntent)传递给应用程序外部的另一个组件,该组件就必须公开发布。

您要求提供代码示例。另一个应用程序可以触发您在示例中给出的BroadcastReciever组件,如下所示:

Intent intent = new Intent();
intent.setClassName("com.google.android.youtube",
                    "com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14$RemoteControlIntentReceiver");
sendBroadcast(intent);

希望这能解答您的所有问题。