Android 通知(使用NotificationCompat.Builder )

以下内容包括创建、更新、撤销通知和悬浮窗型通知。本文适用于android 8.0之下情况,android 8.0需要为通知添加渠道,可以参考我的这篇:Android 8.0 通知显示,本文代码所有通知都没有添加渠道。
Android 的通知,之前的写法是用Notification notification=new Notification (……)。这种方法已经被弃用。还有一些实现方法总是包含一些建议不再使用的方法或变量,的下面讲述的是,支持Android 3.0及其以上的通知使用方法(不使用那些弃用的方法):使用NotificationCompat.Builder(v4库下的,即import android.support.v4.app.NotificationCompat;)。实现点击通知,进入活动,同时通知消失,并且不会让该活动之前的活动出栈,若本活动已经创建,将不会重新创建活动。实现的效果:点击通知,相当于从系统主页,直接点击应用图标进入应用的相应活动。

1.创建或者更新一个通知

要求点击通知后进入活动,同时通知消失,不会让之前的活动出栈,若已有该活动则,不再销毁原活动后重新创建活动。如果没有就创建,如果有就更新指定id的通知。效果如下(在真机测试时,图标是彩色的,这里应该是因为没有使用Material Design):

在其他界面点击通知在通知跳转界面点击通知
这里写图片描述这里写图片描述

java代码:
全局变量:

NotificationManager mNotificationManager;
int notificationId=0;//通知的id

在onCreate中初始化NotificationManager:

mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

在需要出现通知的地方写下如下代码,注意,如果需要选择导入,均导入的是用版本 4 支持库中的类。

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)//左部图标
                .setContentTitle("通知标题")//上部标题
                .setContentText("通知内容")//中部通知内容
                .setAutoCancel(true);//点击通知后自动消失
builder.setDefaults(Notification.DEFAULT_ALL);//通知的声音震动等都随系统
//也可以选择使用声音文件,这里的文件是res/raw/miui_notice.mp3
//        Uri uri=Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.miui_notice);
//        builder.setSound(uri);
        Intent resultIntent = new Intent(this, Main2Activity.class);//点击通知后进入的活动
        //这两句非常重要,使之前的活动不出栈
        resultIntent.setAction(Intent.ACTION_MAIN);
        resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent,
         PendingIntent.FLAG_UPDATE_CURRENT);//允许更新

        builder.setContentIntent(resultPendingIntent);
        //如果没有就创建,如果有就更新,
        //第一个参数是设置创建通知的id或者需要更新通知的id
        mNotificationManager.notify(notificationId, builder.build());

在通知要跳转到的活动的注册的地方加一句:

android:launchMode="singleTask"

2.撤销通知

撤销指定id的通知,或本应用发出的所有通知。:

 mNotificationManager.cancel(notificationId);//撤销指定id通知
        //mNotificationManager.cancelAll();//撤销本程序发出的全部通知

3.浮动通知(弹窗式通知)

像悬浮窗一样的通知,悬浮在屏幕上部,效果如下:

这里写图片描述
与状态栏的通知的唯一区别是加了下面一句:

builder.setFullScreenIntent(resultPendingIntent,true);

下面是比较完整的代码,写在之前定义的活动里,需要浮动通知的地方:


        NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)//左部图标
                .setContentTitle("通知标题")//上部标题
                .setContentText("点击前往第二界面")//中部通知内容
                .setAutoCancel(true);//点击通知后自动消失

        Intent resultIntent = new Intent(this, Main2Activity.class);
        resultIntent.setAction(Intent.ACTION_MAIN);
        resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);

//building the notification
        builder.setContentIntent(resultPendingIntent);
        //更新或创建通知,并注明通知的id
//下面一句是悬浮通知与一般通知的唯一区别
        builder.setFullScreenIntent(resultPendingIntent,true);

        mNotificationManager.notify(notificationId, builder.build());
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值