数据发送方:

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的更多相关文章

  1. [android] 在不同的activity之间传递数据

    新建一个activity,继承Activity 清单文件中进行配置,添加<activity/>节点 设置名称 android:name=”.类名” 点 代表的是当前包名,也可以不写 新建一 ...

  2. Servlet之初始化参数和传递数据(ServletConfig,ServletContext )

    ServletConfig 容器初始化一个Servlet的时候,会为这个Servlet建一个唯一的Servletconfig的对象(Servlet的配置对象) 容器会从部署的描述文件(web.xml) ...

  3. 探究Spring Boot中的接收参数问题与客户端发送请求传递数据

    结合此篇参考Spring框架学习笔记(9)--API接口设计相关知识及具体编码实现 在使用Spring Boot进行接收参数的时候,发现了许多问题,之前一直都很忙,最近才稍微有空研究一下此问题. 网上 ...

  4. Intent界面跳转与传递数据

    Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. intent可以激活Activity,服务,广播三类组件. 本博文讲的是显示意图激活Activity组件 ...

  5. Android Intent传递数据

    刚开始看郭大神的<>,实现以下里面的一些例子.Intent传递数据. 我们利用显示的方式进行Intent的启动. 1.启动intent并输入数据. Intent intent=new In ...

  6. Android基础知识04—Activity活动之间传递数据

    ------活动之间传递数据------ 向下一个活动传递数据: Intent中提供了一系列的putExtra()方法,可以把数据暂存到Intent中,启动另一个活动的时候就可以取出来. 代码: (存 ...

  7. 【Android基础】利用Intent在Activity之间传递数据

    前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通.   从一个Activ ...

  8. Android学习之基础知识四-Activity活动4讲(Intent传递数据)

    Intent除了可以开启一个活动,还能在启动活动的时候传递数据,此时Intent相当于一个保存数据的库,我们先把数据保存在Intent中,然后再根据各个activity的需要从其中取出数据.  一.使 ...

  9. Intent 简介 结构 传递数据 常见Action 常量 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

随机推荐

  1. 第三十一章 elk(2)- 第二种架构(最常用架构)

    参考:http://linuxg.blog.51cto.com/4410110/1761757 最常用架构: 一.安装redis 1.下载:http://redis.io/download 2.解压后 ...

  2. 用EntityFramework6连接MySQL【转】

    http://www.cnblogs.com/wujingtao/p/5399950.html 不是微软的亲儿子这待遇就是不一样,其中的坑可真实不少,第一次连MySQL足足折腾了我大半天. 废话不多说 ...

  3. File targeting 'AMD64' is not compatible with the project's target platform 'x86' 解决方法

     我在使用vs2010制作64位安装包时出现了以下问题: File targeting 'AMD64' is not compatible with the project's target plat ...

  4. sgd学习率选择问题

    关于使用SGD时如何选择初始的学习率(这里SGD是指带动量的SGD,momentum=0.9): 训练一个epoch,把学习率从一个较小的值(10-8)上升到一个较大的值(10),画出学习率(取log ...

  5. 什么是Platform Services Controller

    Platform Services Controller (PSC) is a component of the VMware Cloud Infrastructure Suite. PSC deal ...

  6. iOS开发-UIActionSheet简单介绍

    UIActionSheet和UIAlertView都是ios系统自带的模态视图,模态视图的一个重要的特性就是在显示模态视图的时候可以阻断其他视图的事件响应.一般情况下我们对UIAlertView使用的 ...

  7. SAP ABAP编程 取得用户中文名称

    有时候我们知道SAP当前用户登录的ID,也就是SY-UNAME.能够取得用户中文名称.例如以下: ***取得用户中文名称 DATA: g_sheet_jsr TYPE string.  "用 ...

  8. 解决ThinkPHP的Create方法失效而没有提示错误信息的问题

    ThinkPHP中的数据创建Create方法是一个非常有用的功能,它自动根据表单数据创建数据对象(在表字段很多的情况下尤其明显) 但有时候该方法可能并未按照你期望的来工作,比如方法不工作而且还没有提示 ...

  9. Total Commander如何设置自定义快捷键在当前目录打开ConEmu

    Total Commander,简称TC,原名Windows Commander,是Windows平台下功能最强大的全能文件管理器. 自从使用了TC基本上就很少再打开Window的文件夹了,因为TC不 ...

  10. 在Excel中输入超过10的带圈数字

    通过改变字体,可以在excel中输入1-20的带圈数字.对于某些人这些还不够用,那怎么办呢? 有了下面这个不知道是哪个大神做的字体,你就可以直接输到100啦 将字体文件文件粘贴至“C:\WINDOWS ...