PendingIntent 如何触发 Intent?

3
例如,我们有如下内容。
PendingIntent pi= PendingIntent.getActivity(context, requestCode, intent, FLAG);

当我们将 pi 对象传递给其他类或其他应用程序时,我们知道包含在 pi 中的意图将稍后由该类或应用程序触发,对吗?
我不明白它如何被触发?
当我们使用意图手动/立即启动组件时,我们调用与精确组件类型相对应的方法( startActivity(intent),startService(intent)等),据我所知,没有像 startAnyComponent(意图)这样的方法。
谢谢你的帮助。
P.S. 我猜想当意图是显式时,通过检查类对象可能有一个简单的方式。
    Intent intent = new Intent(context, clazz):

在这种情况下,系统可以检查是否满足clazz.isAssignableFrom(Service.class),并调用startService(intent)

但对于隐式意图,我无法理解正在发生什么。


让我重新表述一下。我确定之前的表述不够清晰。你具体在问什么?你是在问最终的“Intent”发送者如何知道它是哪种“PendingIntent”类型,从而使用哪种“start*()”/“send*()”方法吗? - Mike M.
@MikeM。是的,我确实在询问那个。 - snersesyan
1
当您调用特定方法时,返回的“PendingIntent”将为该特定组件类型进行配置。也就是说,在触发“Intent”之前,内部设置了一个标志进行检查。例如,当调用“getActivity()”时,标志设置为“ActivityManager.INTENT_SENDER_ACTIVITY”;而在调用“getBroadcast()”时,则为“ActivityManager.INTENT_SENDER_BROADCAST”等。 - Mike M.
非常感谢。 - snersesyan
1个回答

1
当您获得一个PendingIntent时,需要调用getActivity()、getBroadcast()或getService()其中之一。在创建PendingIntent时,Intent的类型被包含在其中,以便它知道该Intent是用于Activity、BroadcastReceiver还是Service。
稍后,当使用PendingIntent时,会从其中获取IntentSender。要实际发送Intent,需要调用IntentSender.sendIntent()。IntentSender知道如何创建PendingIntent,因此知道是否应使用startActivity()、sendBroadcast()或startService()来正确发送Intent。
注意:
关于您对如何使用显式 Intent 的假设:这是行不通的,因为通常发送 Intent 的应用程序没有访问您的应用程序代码的权限,因此无法加载您的类并且不能使用 Class.isAssignableFrom() 来确定 Intent 的类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接