Notification使用

本文详细介绍了Android系统中通知的基本用法,包括普通跳转、返回特定页面、新建任务栈、自定义通知界面及进度条显示。通过实例演示了如何在不同场景下灵活运用通知功能,并提供了自定义通知界面的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果图片不能显示 请点击这里

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

  • 普通的查看 跳转页面

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

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

  • 自定义View的Notification

notification对象的构建

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

  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.youkuaiyun.com/xy_nyle/article/details/19853591

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值