关闭

Android中PendingIntent的基本用法

2650人阅读 评论(0) 收藏 举报
分类:

在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 来得知发出者的意图,选择拦击或者继续传递或者执行。

1
0
查看评论

[Android] PendingIntent详解

转:http://my.oschina.net/u/242041/blog/206710  Intent是一个意图,一个描述了想要启动一个Activity、Broadcast或是Service的意图。它主要持有的信息是它想要启动的组件(Activity、Broadcast或是Serv...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2016-08-03 11:31
  • 3847

Android中pendingIntent的深入理解

pendingIntent字面意义:等待的,未决定的Intent。 要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),getBroadcast(Context, int, Intent, int),ge...
  • YUZHIBOYI
  • YUZHIBOYI
  • 2013-01-09 11:14
  • 119565

Android中pendingIntent的深入理解

  • 2016-06-23 15:47
  • 22KB
  • 下载

android之PendingIntent的使用

PendingIntent的使用 知识点: 1、pendingIntent简介; 2、pendingIntent的基本用法; 3、notification通知的用法; pendingIntent: 是比intent更加先进的一个类,它不同于intent,他必须要满足一定条...
  • qq_16628781
  • qq_16628781
  • 2016-05-31 19:37
  • 2541

Android Notification自定义PendingIntent 详解

本节带来的是Android中用于在状态栏显示通知信息的控件:Notification,相信大部分 学Android都对他都很熟悉,而网上很多关于Notification的使用教程都是基于2.x的,而 现在普遍的Android设备基本都在4.x以上,甚至是5.0以上的都有;他们各自的Notificat...
  • baidujiangwei18
  • baidujiangwei18
  • 2016-05-08 20:48
  • 1288

Android之PendingIntent的深入理解

PendingIntent字面意义:等待的,未决定的Intent。要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, int),   getBroadcast(Context, int, Intent...
  • zhangcanyan
  • zhangcanyan
  • 2015-11-02 11:26
  • 724

Android中PendingIntent的基本用法

在PendingIntent.java文件中,我们可以看到有如下几个比较常见的静态函数:public static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags) public...
  • hp910315
  • hp910315
  • 2015-11-18 16:26
  • 2650

【Android 非常基础】多通知 PendingIntent.getActivity参数使用

在做多通知的时候,一般都希望用户A发过来的消息是用一个通知显示,用户B发过来的消息用另外一个通知显示,互不干扰,那么就得活用PendingIntent.getActivity的参数。 对PendingIntent.getActivity(Context context, int requestCo...
  • ben0612
  • ben0612
  • 2015-03-26 15:53
  • 1710

android中的Intent和PendingIntent的区别

Intent和PendingIntent的区别 Intent是立即使用的,而PendingIntent可以等到事件发生后触发,PendingIntent可以cancel Intent在程序结束后即终止,而PendingIntent在程序结束后依然有效 PendingIntent自带Contex...
  • stven_king
  • stven_king
  • 2014-07-21 12:45
  • 1211

Android状态栏通知(notification)PendingIntent传值(解决传值总是获取第一次的值的问题)

Pendingintent传值问题 pendingintent传值经常获取到的值是第一次的值或者null,这个跟第二个参数和最后一个参数选择有关系。 PendingIntent pendingIntent = PendingIntent.getActivity(this, id, intent, ...
  • Ray534
  • Ray534
  • 2016-10-08 17:02
  • 983
    关于我
    目前就职于百度
    研究方向:Android,机器学习,区块链
    联系方式QQ:2979218500


      欢迎关注微信公众号:DroidMind
      精品内容独家发布平台
      呈现与博客不一样的技术干货
    个人资料
    • 访问:538894次
    • 积分:8497
    • 等级:
    • 排名:第2786名
    • 原创:288篇
    • 转载:48篇
    • 译文:22篇
    • 评论:70条