android NotificationCompat.Builder 使用

一、Android通知的简单介绍

 之前我们使用Android通知的时候用的是Notification,可是今天我查阅了一下Android官网API,发现官方已经不推荐使用Notification,而是推荐使用v4包下的NotifitionCompat,总结了一下通知大概分为一下几种:
 1.简单通知
 2.点击通知进入一个Activity,点击返回时进入指定页面
 3.点击通知进入一个Activity,点击返回时回到桌面
 4.带进度条的通知
 5.可下拉拖动的通知
 6.自定义布局的通知

二、通知的具体实现
  1. 简单通知

    private void simpleNotice() {
        //此Builder为android.support.v4.app.NotificationCompat.Builder中的,下同。
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        //系统收到通知时,通知栏上面显示的文字。
        mBuilder.setTicker("通知标题1");
        //显示在通知栏上的小图标
        mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup);
        //通知标题
        mBuilder.setContentTitle("通知标题1");
        //通知内容
        mBuilder.setContentText("文本1");
    
        //设置大图标,即通知条上左侧的图片(如果只设置了小图标,则此处会显示小图标)
        mBuilder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.launcher));
        //显示在小图标左侧的数字
        mBuilder.setNumber(6);
    
        //设置为不可清除模式
        mBuilder.setOngoing(false);
    
        //显示通知,id必须不重复,否则新的通知会覆盖旧的通知(利用这一特性,可以对通知进行更新)
        nm.notify(1, mBuilder.build());
    
    }
    
  2. 点击通知进入一个Activity,点击返回时进入指定页面

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    public void resultActivityBackApp() {
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setTicker("通知标题2");
        mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup);
        mBuilder.setContentTitle("通知标题2");
        mBuilder.setContentText("点击通知进入一个Activity,点击返回时进入指定页面。");
    
    //设置点击一次后消失(如果没有点击事件,则该方法无效。)
    mBuilder.setAutoCancel(true);
    
    //点击通知之后需要跳转的页面
    Intent resultIntent = new Intent(this, ResultActivity.class);
    
    //使用TaskStackBuilder为“通知页面”设置返回关系
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    //为点击通知后打开的页面设定 返回 页面。(在manifest中指定)
    stackBuilder.addParentStack(ResultActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    
    PendingIntent pIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(pIntent);
    // mId allows you to update the notification later on.
    nm.notify(2, mBuilder.build());
    

    }

  3. 点击通知进入一个Activity,点击返回时回到桌面

    public void resultActivityBackHome() {
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setTicker("通知标题3");
    mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup);
    mBuilder.setContentTitle("通知标题3");
    mBuilder.setContentText("点击通知进入一个Activity,点击返回时回到桌面");
    
    //设置点击一次后消失(如果没有点击事件,则该方法无效。)
    mBuilder.setAutoCancel(true);
    
    Intent notifyIntent = new Intent(this, ResultActivity.class);
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(pIntent);
    
    nm.notify(3, mBuilder.build());
    }
    
  4. 带进度条的通知

    public void progressNotice() {
    final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setTicker("通知标题4");
    
    mBuilder.setContentTitle("Picture Download")
            .setContentText("Download in progress")
            .setSmallIcon(R.drawable.ic_wode_thumbup);
    
    // Start a lengthy operation in a background thread
    new Thread(new Runnable() {
        @Override
        public void run() {
            int progress;
            for (progress = 0; progress <= 100; progress++) {
                // Sets the progress indicator to a max value, the current completion percentage,
                // and determinate state
                mBuilder.setProgress(100, progress, false);
    
                //不明确进度的进度条
           //mBuilder.setProgress(0, 0, true);
    
                nm.notify(4, mBuilder.build());
                // 模拟延时
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
    
            // When the loop is finished, updates the notification  F
            mBuilder.setContentText("Download complete");
            // Removes the progress bar
            mBuilder.setProgress(0, 0, false);
            nm.notify(4, mBuilder.build());
        }
    }
    ).start();
    }
    
  5. 可下拉拖动的通知

    public void expandLayoutNotice() {
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setTicker("通知标题5");
    mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup);
    mBuilder.setContentTitle("通知标题5");
    mBuilder.setContentText("按住通知下拉可显示扩展布局");
    
    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    String[] events = new String[]{"Beijing", "Tianjin", "Shanghai", "Guangzhou"};
    // 设置扩展布局的标题
    inboxStyle.setBigContentTitle("Event tracker details:");
    
    for (String s : events) {
        inboxStyle.addLine(s);
    }
    mBuilder.setStyle(inboxStyle);
    
    nm.notify(5, mBuilder.build());
    }
    
  6. 自定义布局的通知

    public void customLayoutNotice() {
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
    mBuilder.setTicker("通知标题6");
    mBuilder.setTicker("通知标题6");
    mBuilder.setSmallIcon(R.drawable.ic_wode_thumbup);
    
    RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_layout_notice);
    mBuilder.setContent(remoteViews);
    remoteViews.setTextViewText(R.id.tv_content, "自定义content");
    remoteViews.setTextViewText(R.id.tv_title, "自定义title");
    remoteViews.setImageViewResource(R.id.iv_icon, R.drawable.launcher);
    
    //为RemoteViews上的按钮设置点击事件
    Intent intent = new Intent(this, ResultActivity.class);
    PendingIntent pIntentButton1 = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    remoteViews.setOnClickPendingIntent(R.id.ll_notice, pIntentButton1);
    
    nm.notify(6, mBuilder.build());
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值