【问题标题】:Android: Threat implicit intent in a class that is not an Activity or BroadcastReceiverAndroid:威胁非 Activity 或 BroadcastReceiver 的类中的隐式意图
【发布时间】:2016-09-23 14:15:28
【问题描述】:

我想启动一个带有隐式意图的应用程序,但在该应用程序启动之前,我需要处理该意图并启动一个状态机,然后加载一个Activity

我可以使用广播接收器或活动来做到这一点

<receiver android:name="com.13.MyBroadcastReceiver">
    <intent-filter>
        <action android:name="com.13.StartStateMachine" />
    </intent-filter>
</receiver>

但是我无法控制其他应用是否会响应相同的意图。

<activity android:name="com.13.MyReceiverActivity">
    <intent-filter>
        <action android:name="com.13.StartStateMachine" />
    </intent-filter>
</activity >

但这不干净,我可以先处理onCreate(),然后再处理finish()

知道我是否可以结合使用这些方法吗? 我的意思是使用隐式(或显式)意图从另一个应用程序加载一个类(不是BroadcastReceiverActivity)?

【问题讨论】:

  • “我想启动一个带有隐含意图的应用程序”——其他一些应用程序正在启动您的应用程序。为什么该应用程序会使用隐式 Intent 来启动您的应用程序?谁将编写这个其他应用程序? “但是我无法控制其他应用程序是否会响应同样的意图”——你通常缺乏对隐式 Intents 的控制。您无法控制其他应用程序是否有响应您的隐式Intent 的活动。 “我的意思是使用隐式(或显式)意图从另一个应用程序加载一个类(不是 BroadcastReceiver 或 Activity)?” - 没有什么可以解决您的问题。
  • 感谢您的回复,我有这两个应用程序的代码。
  • 那你为什么要使用隐式Intent?如果您控制这两个应用程序,并且希望应用程序 A 启动应用程序 B,则使用显式 Intent。或者,从隐式 Intent 开始,使用 PackageManager 确定 App B 中的哪个组件支持 Intent,并使用该信息使 Intent 显式。
  • 我不想使用隐式意图,但认为它是比显式意图更好的解决方案。另外,我使用包管理器来检查它,正如你所建议的。现在,这适用于隐式意图 + 一个活动,只是为了处理我的意图并启动状态机,但我认为这种方法有点脏。

标签: android android-intent broadcastreceiver


【解决方案1】:

由于这两个应用程序都是您的,因此欢迎您使用任何您想要的 IPC 机制。

使用Activity 的优点是您可以选择说所有内容都在同一个任务中。因此,当 App A 启动 App B 的活动时,这都可以是一个任务。任何其他 IPC 机制都会迫使您开始一项新任务。

因此,正如我在评论中建议的那样,使用 PackageManager 将隐式 Intent 转换为显式。然后,使用您想要的任何 IPC。如果您想使用“广播”(明确的Intent 确实使其更像是“窄播”),欢迎您这样做。

恕我直言,说一个活动将控制权转移到另一个活动,也许使用finish(),并不是真的“脏”。毕竟,应用程序使用的许多初始屏幕都是这样做的。恕我直言,当startActivity() 可以正常工作时,使用任何其他 IPC 机制来启动活动是“脏的”。

【讨论】:

  • 谢谢,我不喜欢以这种方式使用活动,但我似乎别无选择。
猜你喜欢
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2012-06-19
相关资源
最近更新 更多