技术开发 频道

PendingInent 与 AlarmManager

  三、PendingIntent

  在前面的章节中,我们在注册闹铃﹑发送闹铃事件的时候,有过一个重要的参数PendingIntent。这个PendingIntent可以说是 Intent的进一步封装,他既包含了Intent的描述又是Intent行为的执行(这种定义也许不太严格),如果将Intent比作成一个订单的话,PendingIntent更像是一个下订单的人,因为它既要负责将订单发出去,也要负责订单发送后的处理,比如发送成功后要准备验收订单货物,发送失败后要重发还是取消订单等操作。开发者可以通过调用getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Intent, int)函数来得到一个PendingIntent实例。

public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)

   通过该函数获得的PendingIntent将会扮演一个广播的功能,就像调用 Context.sendBroadcast()函数一样。当系统通过它要发送一个intent时要采用广播的形式,并且在该intent中会包含相应的 intent接收对象,当然这个对象我们可以在创建PendingIntent的时候指定,也可以通过ACTION 和CATEGORY等描述让OPhone系统自动找到该行为处理对象。

  实例代码如下:

Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
PendingIntent sender
= PendingIntent.getBroadcast(AlarmController.this,
                    
0, intent, 0);
Public static PendingIntent getActivity(Context, int, Intent, int)

  通过该函数获得的PendingIntent可以直接启动新的activity, 就像调用 Context.startActivity(Intent)一样.不过值得注意的是要想这个新的Activity不再是当前进程存在的Activity 时。我们在intent中必须使用Intent.FLAG_ACTIVITY_NEW_TASK.

  实例代码如下:  

// The PendingIntent to launch our activity if the user selects this notification
PendingIntent contentIntent
= PendingIntent.getActivity(this, 0,
                            
new Intent(this, AlarmService.class), 0);

 

public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags)

   通过该函数获得的PengdingIntent可以直接启动新的Service,就像调用Context.startService()一样。

  实例代码如下:

  // Create an IntentSender that will launch our service, to be scheduled
    
// with the alarm manager.
    mAlarmSender
= PendingIntent.getService(AlarmService.this,
                
0, new Intent(AlarmService.this, AlarmService_Service.class), 0);

 

  

0
相关文章