关于PendingIntent

PendingIntent对Intent做了进一步的封装,然后把PendingIntent交给别的程序,定时或者由用户手动触发。这个主要用于Notification,AppWidget,AlarmManager等

首先看官方解释:An Intent is something that is used right now; a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.


有三个静态方法可以获得PendingIntent实例:
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)  
public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)  
public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags) 


其中的参数,

requestCode,Private request code for the sender (currently not used).官方的解释是未用到,一般用0

flags,官方给了4个flag类型,也可以用0

FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的PendingIntent对象,那么就将先将已有的PendingIntent取消,然后重新生成一个PendingIntent对象。
FLAG_NO_CREATE:如果当前系统中不存在相同的PendingIntent对象,系统将不会创建该PendingIntent对象而是直接返回null。
FLAG_ONE_SHOT:该PendingIntent只作用一次,如果该PendingIntent对象已经触发过一次,那么下次再获取该PendingIntent并且再触发时,系统将会返回一个SendIntentException,在使用这个标志的时候一定要注意哦。
FLAG_UPDATE_CURRENT:如果系统中已存在该PendingIntent对象,那么系统将保留该PendingIntent对象,但是会使用新的Intent来更新之前PendingIntent中的Intent对象数据,例如更新Intent中的Extras。


一般比较常用的flag是FLAG_UPDATE_CURRENT和FLAG_CANCEL_CURRENT。


要注意的是,如果同时有多个PendingIntent,而且其中关联的Intent通过比较Intent.filterEquals是相同的,那么会覆盖前一个。一般的表现为Intent中的Extra中的不一致,例如:

Intent intent = new Intent(context, MainActivity.class);
intent.putExtra(“CMD”,”cmd1”);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent, 0);
remoteViews.setOnClickPendingIntent(R.id.widget_goto_main, pendingIntent);
如果另外一个是intent.putExtra("CMD", "cmd2"),那么悲剧就会出现,最后所有的响应都是cmd2。可以通过上述的flag来进行设置,或者改变Intent的action等条件。


PendingIntent的执行过程,调用send方法,具体见:http://www.devdiv.com/home.php?mod=space&uid=1&do=blog&id=2644


参考:http://developer.android.com/reference/android/app/PendingIntent.html

http://7dot9.com/2011/04/android-pendingintent%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E8%BF%B7%E6%83%91/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值