Notification使用

Notification一些基本用法 根据四个需求来

  • 普通的查看 跳转页面

  • 查看后返回某个固定页面的意图
    我们自己的APP的通知 查看之后回到我们APP的首页  或者联系几页返回

  • 新建一个Task 用来查看 返回上一个最近任务栈
    查看之后 回到之前正在进行的任务 效果上感觉这个和普通的没什么差别 这个就是新建一个task专门来处理查看通知的操作

  • 自定义View的Notification

notification对象的构建

低版本的就不说了 这里用Builder构造

//notification的管理类
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(this);
builder.setContentInfo("info");
builder.setContentTitle("title");
builder.setContentText("下载进度");
builder.setSmallIcon(R.mipmap.collention);

//构建 发出通知
Notification notification = builder.build();
notificationManager.notify(0, notification);

1 普通的跳转 就是在构建notification对象的时候塞入一个Intent 这里叫PendingIntent 延迟意图

Intent resultIntent1 = new Intent(this, Main2Activity.class);
//这个用于下面的 在发送通知时判断是否存在 因为设置的是PendingIntent.FLAG_UPDATE_CURRENT   
int requestCode1 = (int) SystemClock.uptimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
            changeIntent(pendingIntent);
  • PendingIntent.FLAG_UPDATE_CURRENT**这个参数一般有四种选择分别是:
    FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。 FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。
    FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。
    FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,那么 系统将不会重复创建,只是把之前不同的传值替换掉。(所以这里如果值不变 是不是有变化的 以致于会出现一些问题 通常做法就是在构建PendingIntent的时候传入不一样的requestCode来改变 更新PendingIntent 一般都是用这个)

使用代码如下 效果如图

Intent resultIntent1 = new Intent(this, Main4Activity.class);
int requestCode1 = (int) SystemClock.uptimeMillis();
PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode1, resultIntent1, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(pendingIntent);
Notification notification = builder.build();
notificationManager.notify(0, notification);
发现 在当前页面查看通知后返回还是在当前页面 退出程序之后 在主菜单查看通知 返回的是主菜单
GIF.gif

2 回退到固定的页面 这里做一些配置
清单文件的配置 指明parentActivity 和TaskStackBuilder

<activity
        android:name=".Main2Activity"
        android:excludeFromRecents="true"
        android:launchMode="singleTask"
        //指定当前Activity的返回的上一个页面
        android:parentActivityName=".MainActivity"
        android:taskAffinity="" >

        //兼容低版本
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
    //配置同上
    <activity
        android:name=".Main3Activity"
        android:parentActivityName=".Main2Activity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".Main2Activity" />
    </activity>


Intent resultIntent = new Intent(this, Main3Activity.class);
 TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
 stackBuilder.addParentStack(Main3Activity.class);
 stackBuilder.addNextIntent(resultIntent);
 int requestCode = (int) SystemClock.uptimeMillis();
 PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(requestCode,   PendingIntent.FLAG_UPDATE_CURRENT);
 builder.setContentIntent(resultPendingIntent );
Notification notification = builder.build();
notificationManager.notify(0, notification);

效果图

只要查看通知 返回顺序都是 指定要其parentActivity的页面

GIF.gif

3:新开任务栈 的方式
效果就不看了 看看如何配置吧

      <activity
        android:name=".Main2Activity"
        //清除最近列表的记录
        android:excludeFromRecents="true"
        //新开任务栈 启动模式
        android:launchMode="singleTask"
        android:parentActivityName=".MainActivity"
        //这个要写 不然会有问题 不然没效果  我不太清楚这个有什么用 后续在了解
        android:taskAffinity="" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>


  Intent notifyIntent = new Intent(this, Main2Activity.class);
  notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_CLEAR_TASK);
  int requestCode2 = (int) SystemClock.uptimeMillis();
  PendingIntent pendIntent = PendingIntent.getActivity(this, requestCode2,
                    notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

  builder.setContentIntent(pendIntent );
  Notification notification = builder.build();
  notificationManager.notify(0, notification);

4 自定义通知界面

     NotificationCompat.Builder builder1 = new NotificationCompat.Builder(this);
            RemoteViews remoteView = new RemoteViews(getPackageName(),R.layout.remote);
            remoteView.setTextViewText(R.id.text, "DaemonLiu");

            remoteView.setImageViewResource(R.id.image, R.mipmap.collention);

            builder1.setSmallIcon(R.mipmap.collention);
            builder1.setContent(remoteView);
            Intent resultIntent4 = new Intent(this, Main4Activity.class);
            int requestCode4 = (int) SystemClock.uptimeMillis();
            PendingIntent pendingIntent4 = PendingIntent.getActivity(this, requestCode4, resultIntent4, PendingIntent.FLAG_UPDATE_CURRENT);

            remoteView.setOnClickPendingIntent(R.id.image,pendingIntent4);

            builder.setContentIntent(pendingIntent4);
            Notification notification = builder1.build();
            notificationManager.notify(1, notification);

效果图 自定义通知页面 然后再image上面附加事件 点击后跳转

GIF.gif

在关于进度条的设置 上面第一张图有进度条 代码如下

new Thread(new Runnable() {
        @Override
        public void run() {
            int incr;
            for (incr = 0; incr <= 100; incr += 5) {
                // mBuilder.setProgress(100, incr, false);
                builder.setProgress(100, incr, false);
                builder.setContentText("下载进度"+incr+"%");
                notificationManager.notify(0, builder.build());
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                }
            }
            builder.setContentText("Download complete").setProgress(0, 0,
                    false);
            notificationManager.notify(0, builder.build());
        }
    }
            // Starts the thread by calling the run() method in its Runnable
    ).start();

这里只是简单记录下notification的简单的使用 关于notification的更多详细介绍 4.0之后的 三种style形式等等 贴上一个地址 觉得写得挺详细的
http://blog.csdn.net/xy_nyle/article/details/19853591

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容