Android--Notification横幅通知栏

Posted chaoyu168

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android--Notification横幅通知栏相关的知识,希望对你有一定的参考价值。

一、概述

1、Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。在发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。

2、样式

其属性描述如下:

1.代表: 通知标题,通过 setContentTitle() 方法设置。
2.代表: 大图标,通过 setSmallIcon() 方法设置。
3.代表:  通知内容,通过 setContentText() 方法设置。 
4.代表: 通知消息 
5.代表:小图标,通过 setLargeIcon() 方法设置。
6.代表: 通知时间,一般为系统时间,也可以使用setWhen()设置。

当 setSmallIcon() 与 setLargeIcon() 同时存在时, smallIcon 显示在通知的右下角, largeIcon 显示在左侧;当只设置 setSmallIcon() 时, smallIcon 显示在左侧。

二、基本用法

1、创建通道

NotificationChannel是android8.0新增的特性,如果App的targetSDKVersion>=26,没有设置channel通知渠道的话,就会导致通知无法展示。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    //android 8.0以上需要特殊处理,也就是targetSDKVersion为26以上
    createNotificationChannel();
}

@TargetApi(Build.VERSION_CODES.O)
private void createNotificationChannel() {
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
    channel.canBypassDnd();//是否绕过请勿打扰模式
    channel.enableLights(true);//闪光灯
    channel.setLockscreenVisibility(VISIBILITY_SECRET);//锁屏显示通知
    channel.setLightColor(Color.RED);//闪关灯的灯光颜色
    channel.canShowBadge();//桌面launcher的消息角标
    channel.enableVibration(true);//是否允许震动
    channel.getAudioAttributes();//获取系统通知响铃声音的配置
    channel.getGroup();//获取通知取到组
    channel.setBypassDnd(true);//设置可绕过 请勿打扰模式
    channel.setVibrationPattern(new long[]{100, 100, 200});//设置震动模式
    channel.shouldShowLights();//是否会有灯光
    getManager().createNotificationChannel(channel);
}

1)NotificationChannel的方法列表

getId()    获取ChannelId
enableLights(boolean boolean)    是否开启指示灯(是否在桌面icon右上角展示小红点)
setLightColor()    设置指示灯颜色
enableVibration()    是否开启整的
setVibrationPattern()     设置震动频率
setImportance()    设置频道重要性
getImportance()     获取频道重要性
setSound()     设置声音
getSound()     获取声音
setGroup()    设置 ChannleGroup
getGroup()     得到 ChannleGroup
setBypassDnd()     设置绕过免打扰模式
canBypassDnd()     检测是否绕过免打扰模式
getName()     获取通知渠道名称
setLockScreenVisibility()     设置是否应在锁定屏幕上显示此频道的通知
getLockscreenVisibility()     检测是否应在锁定屏幕上显示此频道的通知
setShowBadge()    设置是否显示角标
canShowBadge()     检测是否显示角标
2)重要程度

     数值越高,提示权限就越高,最高的支持发出声音和悬浮通知,如下所示:

public class NotificationManager {
    ......
    public static final int IMPORTANCE_DEFAULT = 3;
    public static final int IMPORTANCE_HIGH = 4;
    public static final int IMPORTANCE_LOW = 2;
    public static final int IMPORTANCE_MAX = 5;
    public static final int IMPORTANCE_MIN = 1;
    public static final int IMPORTANCE_NONE = 0;
    public static final int IMPORTANCE_UNSPECIFIED = -1000;
 
}
2、发出通知

Notification notification = new NotificationCompat.Builder(this, "chat")
                        .setAutoCancel(true)
                        .setContentTitle("收到消息")
                        .setContentText("什么")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        //设置红色
                        .setColor(Color.parseColor("#F00606"))
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
                        .setContentIntent(pendingIntent)
                        .build();
                manager.notify(1, notification);

     调用NotificationManager的notify()方法即可

3、删除NotificationChann

     调用NotificationManager的deleteNotificationChannel(int chatChannelId)即可。

4、PendingIntent

     1)PendingIntent 是一种特殊的 Intent ,用于在某个事件结束后执行特定的 Action 。当用户点击通知时,才会执行。

     2)PendingIntent获取方式:

PendingInteng.getBroadcast(contex, requestCode, intent, flags) 
PendingInteng.getService(contex, requestCode, intent, flags) 
PendingInteng.getActivity(contex, requestCode, intent, flags) 
PendingInteng.getActivities(contex, requestCode, intent, flags) 
 
其中flags属性参数用于确定PendingIntent的行为: 
FLAG_ONE_SHOT: 表示返回的PendingIntent仅能执行一次,执行完后自动消失 
FLAG_NO_CREATE: 表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL 
FLAG_CANCEL_CURRENT: 表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent 
FLAG_UPDATE_CURRENT: 表示更新的PendingIntent,如果构建的PendingIntent已经存在,则替换它,常用。

5、自定义通知栏

     

	protected void showRemoteViewsNotification() {
		Notification.Builder builder = new Notification.Builder(this);
		builder.setTicker("Hello RemotesViews!");// 收到通知的时候用于显示于屏幕顶部通知栏的内容
		builder.setSmallIcon(R.drawable.ic_launcher);// 设置通知小图标,在下拉之前显示的图标
		builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher));// 落下后显示的图标
		builder.setWhen(System.currentTimeMillis());
		builder.setOngoing(true);// 不能被用户x掉,会一直显示,如音乐播放等
		builder.setAutoCancel(true);// 自动取消
		builder.setOnlyAlertOnce(true);// 只alert一次
		builder.setDefaults(Notification.DEFAULT_ALL);
		mRemoteViews.setImageViewResource(R.id.logo, R.drawable.large_icon);
		mRemoteViews.setTextViewText(R.id.notify_title, "这是自定义view的title");
		mRemoteViews.setTextViewText(R.id.notify_content, "这里是自定义view的内容");
		mRemoteViews.setTextViewText(R.id.notify_time, getCurrentTime());
		builder.setContent(mRemoteViews);
 
		Intent intent = new Intent(this, SecondActivity.class);
		intent.putExtra(SINGLE, REMOTE_VIEWS_NOTIFICATION);
		intent.setPackage(this.getPackageName());
		PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
		builder.setContentIntent(pendingIntent);
		Notification notification = builder.build();
		notification.flags = Notification.FLAG_AUTO_CANCEL;
		NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
		manager.notify(0, notification);
	}

6、显示多条通知

参考:https://blog.csdn.net/black_bread/article/details/63255435

7、消息数显示

参考:https://blog.csdn.net/An_nAl/article/details/77840339

以上是关于Android--Notification横幅通知栏的主要内容,如果未能解决你的问题,请参考以下文章

Android Notification 通知封装成工具类

Android Notification 通知封装成工具类

Android Notification自定义通知样式你要知道的事

你真的了解Android Notification吗?

android notification,notificationmanager详解

Android Notification状态栏通知