android NotificationCompat.Builder 使用

来源:互联网 发布:js实现发牌的特效 编辑:程序博客网 时间:2024/04/28 13:01

一、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 threadnew 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