gpt4 book ai didi

android - Android环境中不同应用程序之间的显式 Intent 有什么用?

转载 作者:行者123 更新时间:2023-11-29 00:16:31 26 4
gpt4 key购买 nike

讨论关于 Android 安全的一个问题,我们找不到合理的答案(可能是幼稚的问题):

  1. 为什么 Android 应用程序声明 Activity/接收器/服务没有 intent-filter 和标签的 list 导出=真?
  2. 另一个应用程序如何发送显式 Intent 到如上声明的接收者?请给出一个代码示例,如果可能的。
  3. 这意味着什么?

应用程序 list 中的示例:package = "com.google.android.youtube"应用程序:android:name="com.google.android.apps.youtube.app.YouTubeApplication"接收器:android:name="com.google.android.apps.youtube.core.player.notification.ExternalPlaybackControllerV14$RemoteControlIntentReceiver"android:exported="true"

最佳答案

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

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

关于android - Android环境中不同应用程序之间的显式 Intent 有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26520215/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com