PendingIntent传递数据注意参数RequestCode和Flag
数据发送方:
public static void notify(Context context, TxrjMessage msg) {
NotificationManager notifiMgr = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
/*Notification notifi = new Notification(R.drawable.sms_icon,
"短信", System.currentTimeMillis()); */
Notification notifi = new Notification();
notifi.icon = R.drawable.sms_icon;
notifi.tickerText = msg.getBody();
notifi.when = System.currentTimeMillis();
/*notifi.flags = Notification.FLAG_ONGOING_EVENT
| Notification.FLAG_NO_CLEAR | Notification.FLAG_SHOW_LIGHTS;*/
notifi.defaults = Notification.DEFAULT_ALL;
Intent it = new Intent(context, MessageListActivity.class);
it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String displayName = TextUtils.isEmpty(msg.getName()) ? msg.getNumber() : msg.getName();
it.putExtra(TxrjConstant.EXTRA_THREAD_DISPLAY_NAME, displayName);
it.putExtra(TxrjConstant.EXTRA_THREAD_NUMBER, msg.getNumber());
notificationId++;
it.putExtra(TxrjConstant.EXTRA_NOTIFICATION_ID, notificationId);
PendingIntent pendIt = PendingIntent.getActivity(context,
TxrjConstant.REQUEST_READ_NOTIFICATION,
it, PendingIntent.FLAG_UPDATE_CURRENT);
notifi.setLatestEventInfo(context, displayName, msg.getBody(), pendIt);
notifiMgr.notify(notificationId, notifi);
}
数据接收方:
mThreadId = getIntent().getLongExtra(TxrjConstant.EXTRA_THREAD_ID, -1);
mDisplayName = getIntent().getStringExtra(TxrjConstant.EXTRA_THREAD_DISPLAY_NAME);
mName = getIntent().getStringExtra(TxrjConstant.EXTRA_THREAD_NAME);
mNumber = getIntent().getStringExtra(TxrjConstant.EXTRA_THREAD_NUMBER);
int notifiId = getIntent().getIntExtra(TxrjConstant.EXTRA_NOTIFICATION_ID, -1);
if(notifiId != -1) {
NotificationManager notifiMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
notifiMgr.cancel(notifiId);
}
如果使用PendingIntent.FLAG_UPDATE_CURRENT,那么每次notifiId都是相同的数字,说明PendingIntent是一个,旧的参数被更新了。
如果使用PendingIntent.FLAG_ONE_SHOT,那么PendingIntent只是第一次有效,后来再点击别的Notification就无效了。
是否和getActivity的第2个参数有关系呢?
确实如此,第2个参数如果不同,那么表示PendingIntent不同,就不会出现上述两种情况。
将发送方蓝色部分代码改成
PendingIntent pendIt = PendingIntent.getActivity(context,
notificationId, it,
PendingIntent.FLAG_ONE_SHOT);
这里使用FLAG_ONE_SHOT是正确有效的。如日志所示。
07-21 02:59:52.154: E/txrjsms(17085): ShowSmsActivity.onDestroy
07-21 02:59:57.749: E/txrjsms(17085): MessageListActivity.onCreate
07-21 02:59:57.910: I/txrjsms(17085): notifiId:1
07-21 02:59:58.260: E/txrjsms(17085): MessageListActivity.onStart
07-21 02:59:58.260: E/txrjsms(17085): MessageListActivity.onResume
07-21 03:00:01.353: E/txrjsms(17085): MessageListActivity.onPause
07-21 03:00:01.943: E/txrjsms(17085): MessageListActivity.onStop
07-21 03:00:01.943: E/txrjsms(17085): MessageListActivity.onDestroy
07-21 03:00:04.536: E/txrjsms(17085): MessageListActivity.onCreate
07-21 03:00:04.726: I/txrjsms(17085): notifiId:2
07-21 03:00:04.956: E/txrjsms(17085): MessageListActivity.onStart
07-21 03:00:04.956: E/txrjsms(17085): MessageListActivity.onResume
07-21 03:00:06.748: E/txrjsms(17085): MessageListActivity.onPause
07-21 03:00:07.279: E/txrjsms(17085): MessageListActivity.onStop
07-21 03:00:07.279: E/txrjsms(17085): MessageListActivity.onDestroy
07-21 03:00:09.541: E/txrjsms(17085): MessageListActivity.onCreate
07-21 03:00:09.591: I/txrjsms(17085): notifiId:3
07-21 03:00:09.941: E/txrjsms(17085): MessageListActivity.onStart
07-21 03:00:09.951: E/txrjsms(17085): MessageListActivity.onResume
07-21 03:00:12.213: E/txrjsms(17085): MessageListActivity.onPause
07-21 03:00:12.844: E/txrjsms(17085): MessageListActivity.onStop
07-21 03:00:12.844: E/txrjsms(17085): MessageListActivity.onDestroy
将FLAG_ONE_SHOT改FLAG_UPDATE_CURRENT测验一下!
PendingIntent pendIt = PendingIntent.getActivity(context,
notificationId, it,
// PendingIntent.FLAG_ONE_SHOT);
PendingIntent.FLAG_UPDATE_CURRENT);
下面的日志表示:FLAG_UPDATE_CURRENT照样OK!
07-21 03:07:03.034: E/txrjsms(18079): MessageListActivity.onCreate // 准备发送短信
07-21 03:07:03.174: I/txrjsms(18079): notifiId:-1
07-21 03:07:03.224: E/txrjsms(18079): MessageListActivity.onStart
07-21 03:07:03.224: E/txrjsms(18079): MessageListActivity.onResume
07-21 03:07:15.757: E/txrjsms(18079): MessageListActivity.onPause
07-21 03:07:17.268: E/txrjsms(18079): MessageListActivity.onStop
07-21 03:07:17.268: E/txrjsms(18079): MessageListActivity.onDestroy // 关闭信息列表界面
07-21 03:08:01.621: E/txrjsms(18079): ShowSmsActivity.onDestroy // 关闭新信息的弹窗
07-21 03:09:39.917: E/txrjsms(18079): MessageListActivity.onCreate // 查看第3个短信通知
07-21 03:09:40.047: I/txrjsms(18079): notifiId:3
07-21 03:09:40.378: E/txrjsms(18079): MessageListActivity.onStart // onCreate之后就是onStart
07-21 03:09:40.378: E/txrjsms(18079): MessageListActivity.onResume
07-21 03:10:28.835: E/txrjsms(18079): MessageListActivity.onPause // 展开状态栏
07-21 03:10:28.835: E/txrjsms(18079): MessageListActivity.onNewIntent // 查看第2个短信通知
07-21 03:10:28.835: I/txrjsms(18079): notifiId:2
07-21 03:10:28.965: E/txrjsms(18079): MessageListActivity.onResume // onNewIntent之后就是onResume
07-21 03:12:48.401: E/txrjsms(18079): MessageListActivity.onPause // 展开状态栏
07-21 03:12:48.401: E/txrjsms(18079): MessageListActivity.onNewIntent // 查看第1个短信通知
07-21 03:12:48.401: I/txrjsms(18079): notifiId:1
07-21 03:12:48.561: E/txrjsms(18079): MessageListActivity.onResume // onNewIntent之后就是onPause
07-21 03:14:31.242: E/txrjsms(18079): MessageListActivity.onPause // 点击HOME键
07-21 03:14:31.712: E/txrjsms(18079): MessageListActivity.onStop
07-21 03:15:02.332: E/txrjsms(18079): MessageListActivity.onRestart // 点击应用图标,启动栈顶的那个Activity
07-21 03:15:02.332: E/txrjsms(18079): MessageListActivity.onStart
07-21 03:15:02.332: E/txrjsms(18079): MessageListActivity.onResume
07-21 03:16:38.286: E/txrjsms(18079): MessageListActivity.onPause // 点击BACK键
07-21 03:16:38.826: E/txrjsms(18079): MessageListActivity.onStop
07-21 03:16:38.826: E/txrjsms(18079): MessageListActivity.onDestroy
PendingIntent传递数据注意参数RequestCode和Flag的更多相关文章
- [android] 在不同的activity之间传递数据
新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...
- Servlet之初始化参数和传递数据(ServletConfig,ServletContext )
ServletConfig 容器初始化一个Servlet的时候,会为这个Servlet建一个唯一的Servletconfig的对象(Servlet的配置对象) 容器会从部署的描述文件(web.xml) ...
- 探究Spring Boot中的接收参数问题与客户端发送请求传递数据
结合此篇参考Spring框架学习笔记(9)--API接口设计相关知识及具体编码实现 在使用Spring Boot进行接收参数的时候,发现了许多问题,之前一直都很忙,最近才稍微有空研究一下此问题. 网上 ...
- Intent界面跳转与传递数据
Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. intent可以激活Activity,服务,广播三类组件. 本博文讲的是显示意图激活Activity组件 ...
- Android Intent传递数据
刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intent=new In ...
- Android基础知识04—Activity活动之间传递数据
------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...
- 【Android基础】利用Intent在Activity之间传递数据
前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通. 从一个Activ ...
- Android学习之基础知识四-Activity活动4讲(Intent传递数据)
Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据. 一.使 ...
- Intent 简介 结构 传递数据 常见Action 常量 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
随机推荐
- 再看copy_on_write缩小临界区的例子
本例子是模拟的读者写者问题,采用shared_ptr+写时拷贝实现,其中我觉得一个比较值得注意的地方是考虑到对象可能在临界区析构而将析构移除临界区,这对于多线程来说要多看多思. #include< ...
- [leetcode]Best Time to Buy and Sell Stock II @ Python
原题地址:https://oj.leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/ 题意: Say you have an array ...
- kafka 主要内容介绍
1. kafka介绍 1.1. 主要功能 根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能: 1:It lets you publish and ...
- CSS3动画的回调处理
我们在做js动画的时候,很多时候都需要做回调处理,如在一个动画完成后触发一个事件.一个动画完成后执行另外一个动画等等,但在使用CSS3动画时能不能捕获到运动的状态做回调处理呢? CSS3动画也是可以做 ...
- 移动端 h5开发相关内容总结——CSS篇
1.移动端开发视窗体的加入 h5端开发以下这段话是必须配置的 <meta name="viewport" content="width=device-width, ...
- 如何导入另一个 Git库到现有的Git库并保留提交记录
问题描述: 我在本地有两个Git库项目(D1=PC项目 包含通用项目,D2=移动项目 也包含通用项目这两个项目在同一目录下),因为这两个项目使用的通用项目是一样的如数据库访问等 只有显示层(vie ...
- 大智慧专业财务PFFIN(N,M)函数N的取值一览表
每股指标 1001 摊薄每股收益 1002 净资产收益率 1003 每股经营活动现金流量 1004 每股净资产 1005 每股资本公积金 1006 每股未分配利润 1007 每股主营收入 1008 扣 ...
- C++结构变量数据对齐问题
为了避免混淆.做例如以下规定,下面代码若不加特殊说明都执行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个样例 请 ...
- MogileFS与FastDFS的个人见解
MogileFS与FastDFS的个人见解 六月 9, 2013 1 条评论 MogileFS & FastDFS 为两个开源分布式文件系统,都主要适用于互联网文件共享,上传,下载等功能,主要 ...
- Spring Boot中Starter是什么
比如我们要在Spring Boot中引入Web MVC的支持时,我们通常会引入这个模块spring-boot-starter-web,而这个模块如果解压包出来会发现里面什么都没有,只定义了一些POM依 ...