RemoteViews之pendingIntent的理解
2016-05-17 23:09
483 查看
在使用RemoteViews的时候 我们发现了一个特别的Intent 即 PendingIntent
根据字面的意思 pending —> 待定 等待 即将发生的意思 也就是 待定发生的Intent ,和普通的Intent相比 PendingIntent不是立即发生的 它是发生在未来的某个特定的时刻 比如说AppWidget点击的时候 Notification点击的时候 所以它的使用时机我们就清楚了 ,它常用来给远程控件添加点击事件 因为对于RemoteViews来说 没有setOnclickListener这样的方法 所以要给它设置单击事件,就需要使用PendingIntent了 使用这个方法remoteViews.setOnClickPendingIntent(R.id.image, pendingIntent); 第一个参数是需要设置事件的控件id 这样就可以给它设置事件了
对于pendingIntent支持三种待定意图
对于这三个函数的参数 第二个参数是pendingIntent的请求参数 第四个参数是一个标志位 这个标志位的作用 后面说明
PendingIntent的匹配规则
flags参数的作用:
根据字面的意思 pending —> 待定 等待 即将发生的意思 也就是 待定发生的Intent ,和普通的Intent相比 PendingIntent不是立即发生的 它是发生在未来的某个特定的时刻 比如说AppWidget点击的时候 Notification点击的时候 所以它的使用时机我们就清楚了 ,它常用来给远程控件添加点击事件 因为对于RemoteViews来说 没有setOnclickListener这样的方法 所以要给它设置单击事件,就需要使用PendingIntent了 使用这个方法remoteViews.setOnClickPendingIntent(R.id.image, pendingIntent); 第一个参数是需要设置事件的控件id 这样就可以给它设置事件了
对于pendingIntent支持三种待定意图
返回值 | 方法说明 |
---|---|
static pendingIntent | public static PendingIntent getActivity(Context context, int requestCode,Intent intent,int flags 当该意图发生时 相当于startActivity(Intent) |
static pendingIntent | public static PendingIntent getService(Context context, int requestCode,Intent intent,int flags 当该意图发生时 相当于startService(Intent) |
static pendingIntent | public static PendingIntent getBroadcast(Context context, int requestCode,Intent intent,int flags 当该意图发生时 相当于sendBroadcast(Intent) |
PendingIntent的匹配规则
如果说两个PendingIntent内部的Intent和 requestCode是一样的 那么就说明这两个PendingIntent是匹配的,而Intent的匹配规则是 ComponentName和intent-filter相同
flags参数的作用:
首先 flags参数有这几种常见的取值 : public static final int FLAG_ONE_SHOT = 1<<30; public static final int FLAG_NO_CREATE = 1<<29; public static final int FLAG_CANCEL_CURRENT = 1<<28; public static final int FLAG_UPDATE_CURRENT = 1<<27; 我们知道在通知栏中 是用manager.notify(1, notification)启动的 第一个参数 如果是一个常量 也就是每次都是不变的,那么不管PendingIntent匹不匹配后面的通知都会把前面的替换掉,如果这个参数不是常量 也就是每次是不同的 那么当PendingIntent不匹配时,不论使用什么flags 都会弹出新的通知且不会相互干扰,这很好理解,因为不匹配 就相当于2个通知,而当两个PendingIntent匹配的时候 这时候就需要注意了 要根据这个flags标记位判断是需要替换还是怎样 这个时候flags分情况解释: FLAG_ONE_SHOT: 后续通知中的 pendingIntent会和第一条通知保持一致,包括Extras 单击任何一条通知后 其他的都无法打开 也就是只可以处理一个 处理完就不能处理了 FLAG_NO_CREATE: 用的较少 不考虑 FLAG_CANCEL_CURRENT: 使用这个标志位 那么只有最新的可以打开 之前弹出的都无法使用 和FLAG_ONE_SHOT正好相反 FLAG_ONE_SHOT是只有第一条可以使用 FLAG_UPDATE_CURRENT:这个标志位比较常用 ,之后的pendingIntent会更新之前的pendingIntent 最终的通知都和最新的一条保持一致 并且都是可以打开的
相关文章推荐
- ●导出excel(office组件)
- leetcode 189. Rotate Array
- 如何读取xml配置文件的内容
- 【Android】20、活动的启动模式——singleTop
- Lua API 小记2(lua值, 栈解释)
- RemoteViews之Notification和Appwidget
- const对象默认是static的,而不是extern的
- Java多线程中,Join和Interrupt()方法的使用
- AngularJS应用介绍
- chrome浏览器下的xdebug helper使用方法
- 简单的python爬取网页字符串内容并保存
- (难)POJ-3666 sort预处理+DP
- Java Collection Framework 之 ArrayList 源码解析
- springMVC运行流程分析
- 设计模式之装饰设和代理设计模式
- python一些内建函数(map,zip,filter,reduce,yield等)
- 多周期CPU设计
- 产品思维学习(六)--浅谈产品数据分析
- 保持进程
- iOS收到推送后,跳转到某一页面