在onReceive中包含你的意图的额外内容时使用setComponent()

时间:2015-03-01 12:17:56

标签: android android-intent broadcastreceiver alarmmanager android-pendingintent

当我设置一个警报由我的接收者在onReceive中拾取然后作为我的接收意图中的额外内容传递给我的调度服务以包含在我的通知中时,我希望通过我的待定意图传递额外内容

E.g。设置闹钟,提醒我在'y'的时间内服用名为'x'的药。我希望在发出警报时在通知中显示名称“x”。

我发现this answer非常有帮助。

但是,在here提供的Google Android示例项目计划程序中,它建议如果您的接收方意图包含需要传递给服务的附加内容,请使用setComponent()指示服务应该处理接收者的意图:

ComponentName comp = new ComponentName(context.getPackageName(), 
           MyService.class.getName());

// This intent passed in this call will include the wake lock extra as well as
// the receiver intent contents.
startWakefulService(context, (intent.setComponent(comp)));

我引用的答案不会这样做。

当onReceive中的组件是服务时,是否只需要使用setComponent?当组件是活动时,这不是必需的吗?

谢谢,山姆。

1 个答案:

答案 0 :(得分:0)

  

但是,在此处提供的Google Android示例项目计划程序中,它建议如果您的接收方意图包含需要传递给服务的额外内容,请使用setComponent()来指示该服务应该处理接收方&#39 ;意图:

您链接到的页面上没有与此相关的内容。

  

我引用的答案不会这样做。

是的,确实如此。它通过Intent构造函数设置组件。

  

当onReceive中的组件是服务时,是否只需要使用setComponent?当组件是活动时,这不是必需的吗?

通过构造函数或setComponent()设置组件用于指示这是应该处理操作的组件,从而创建所谓的显式Intent。如果您没有设置组件,那么其他条件(如操作字符串和Uri)将用于推断谁应该处理操作(隐式Intent)。

一般来说,在可能的情况下,使用明确的Intent对象,以及没有<intent-filter>的组件,以获得最大的安全性。

显式与隐式Intent对象的使用与所讨论的组件是活动,服务还是接收者没有直接关系。