Android中PendingIntent的基本用法

原创 2015年11月18日 16:26:13

在PendingIntent.java文件中,我们可以看到有如下几个比较常见的静态函数:

public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags)
public static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags)
public static PendingIntent getService(Context context, int requestCode, Intent intent, int flags)
public static PendingIntent getActivities(Context context, int requestCode, Intent[] intents, int flags)
public static PendingIntent getActivities(Context context, int requestCode, Intent[] intents, int flags, Bundle options)

上面的getActivity()的意思其实是,获取一个PendingIntent对象,而且该对象日后激发时所做的事情是启动一个新activity。也就是说,当它异步激发时,会执行类似Context.startActivity()那样的动作。相应地,getBroadcast()和getService()所获取的PendingIntent对象在激发时,会分别执行类似Context..sendBroadcast()和Context.startService()这样的动作。至于最后两个getActivities(),用得比较少,激发时可以启动几个activity。

(1)intent就是需要启动的Activity、Service、BroadCastReceiver的intent。

(2)Flags的类型:
FLAG_ONE_SHOT:得到的pi只能使用一次,第二次使用该pi时报错
FLAG_NO_CREATE: 当pi不存在时,不创建,返回null
FLAG_CANCEL_CURRENT: 每次都创建一个新的pi
FLAG_UPDATE_CURRENT: 不存在时就创建,创建好了以后就一直用它,每次使用时都会更新pi的数据(使用较多)

在AlarmManager中的使用

Intent intent = new Intent("action", null, context, serviceClass);  
PendingIntent pi = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  
AlarmManager manager = (AlarmManager)probe.getSystemService(Context.ALARM_SERVICE);  
manager.set(AlarmManager.RTC_WAKEUP, milis, pi); 

在NotificationManager中的使用

Intent intent = new Intent();  
intent.setAction("myaction");  
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);  

NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
Notification n = new Notification();  
n.icon = R.drawable.ic_launcher;  
n.when = System.currentTimeMillis();  
n.setLatestEventInfo(this,"this is title", "this is a message", pi);  
nm.notify(0, n); 

两个重要方法:
send()方法是用,调用PendingIntent.send()会启动包装的Intent(如启动service,activity)

cancel()方法是为了解除PendingIntent和被包装的Intent之间的关联,此时如果再调用send()方法,则会抛出CanceledException异常

PendingIntent和Intent的区别:
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情
换种说法Intent 字面意思是意图,即我们的目的,我们想要做的事情,在activity中,我们可以立即执行它
PendingIntent 相当于对intent执行了包装,我们不一定一定要马上执行它,我们将其包装后,传递给其他activity或application
这时,获取到PendingIntent 的application 能够根据里面的intent 来得知发出者的意图,选择拦击或者继续传递或者执行。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

PendingIntent 用法深入理解

PendingIntent即是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情。换种说法Intent字面意思是意图,我们想要做的事情,在Ac...

用PendingIntent创建一个Alarm的基本过程

PendingIntent以及它的执行过程 public final class         PendingIntent         extends Ob...

android中handler基本用法总结

一、Handler的定义:     Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用。比如可以用handler发送一个message,然后在ha...

Android中的内存泄露(一.内存泄漏的认识以及LeakCannry的基本用法)

引导:          在实际的Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的哥们儿应该都遇到过.但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢?下面,我就跟大家...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)