Android之通知Notification基础知识及适配总结

Notification的使用详解
1、创建一个NotificationManager对象

NotificationManager mManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//通知时通过系统服务来管理通知内容,因此要获取系统服务

2、创建Notification对象

Notification notification = new Notification.Builder(this)
	.setContentTitle("title") 				//通知标题栏
	.setContentText("text")					//通知栏的内容
	.setWhen(System.currentTimeMills())		//设置时间,默认为系统发出的时间,一般不需要设置
	.setSmallIcon(R.mipmap.ic_launch)		//设置通知栏的小图标
	.setLargeIcon(R.mipmap.ic_launch)		//设置通知栏的大图标
	.setTicker("ticker")					//设置状态栏的提示内容
	.setChannelId(Channel)					//设置channelId 以解决适配问题
	.setContentIntent(pengdingIntent)		//设置通知栏点击即执行的意图,与Intent作用类似,但写法不同
	.setPriority(NotificationCompat.PRIORITY_DEFAULT) //设置优先级
	.setSytle()								//下文会讲解
	.setAutoCancel(true)					//设置自动取消
	.build();								//创建一个notification
mManager.notify(0, notification);			//notify 通知,通过通知管理器让通知发出并显示出来

3、PengdingIntent的用法

//例:通过PendingIntent进行通知点击跳转功能。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,XXX.class), 0);

用法使用说明:
(1)通过getActivity(),getBroadcast(),getService()方法获取实例;
(2)参数为(Context , requestcode, Intent, flag)
requestcode一般用不到,通常设置为0;
flag表示为有:
FLAG_ONE_SHOT //表示这个意图只可以使用一次,后续的通知单击后无法打开
FLAG_NO_CREATE //发现已经存在时,忽略新的请求,继续使用老的,日常开发中很少使用
FLAG_CANCEL_CURRENT //如果新请求的PendingIntent发现已经存在时,取消已经存在的,用新的替换老的
FLAG_UPDATE_CURRENT //如果新情求的PendingIntent发现已经存在时,如果Intent有字段改变了,就更新已存在的PendingIntent

4、在跳转后的Activity中通知取消
(1)设置自动取消

	.setAutoCancel(true)					//设置自动取消
	.build();								//创建一个notification

​ (2)在跳转后的Activity

	NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	manager.cancel(0);

​ 其中,cancel传入的0,是我们创建Notification中指定的通知ID。

5、通知进阶
(1)解决文字过长一行无法显示完整问题
当使用setContext时,内容为很长的字符串,内容无法再一行显示完整,为了解决这个问题,我们使用setStyle()这个方法

	.setStyle(new Notification.BigTextStyle.bigText("这样就能解决文字过长的问题了"))

​ NotificationCompat.BigTextStyle这个对象就是用于封装长文本信息的,调用它的bigText()方法将文字传入就行

​ (2)设置带有图片的信息

	.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)))

​ 这就是通知内加入图片的调用方法

扫描二维码关注公众号,回复: 8535400 查看本文章

​ (3)设置通知的重要程度

	.setPriority(Notification.PRIORITY_MAX)

PRIORITY_DEFAULT:表示默认重要程度,和不设置效果一样
PRIORITY_MIN:表示最低的重要程度。系统只会在用户下拉状态栏的时候才会显示
PRIORITY_LOW:表示较低的重要性,系统会将这类通知缩小,或者改变显示的顺序,将排在更重要的通知之后。
PRIORITY_HIGH:表示较高的重要程度,系统可能会将这类通知方法,或改变显示顺序,比较靠前
PRIORITY_MAX:最重要的程度, 会弹出一个单独消息框,让用户做出相应。

另外还有一些其他的方法,诸如setOngoning(boolean) 点击或者侧滑通知,通知是否会消失,一般利用它都是设置一个正在运行的通知,如音乐播放或者下载进度等一些特殊的场景,要设置成true

setDefaults(Notification.DEFAULT_VIBRATE) 给通知添加声音,闪灯和震动效果,可以组合使用,具体参数为
	//Notification.DEFAULT_VIBRATE 添加默认震动提醒
	//Notification.DEFAULT_SOUND 添加默认声音提醒
	//Notification.DEFAULT_LIGHTS 添加默认三色灯提醒
	//Notification.DEFAULT_ALL 添加默认以上3种全部提醒

6、适配
如果App的targetSDKVersion>=26,没有设置channel通知渠道的话,就会导致通知无法展示。
Android O 引入了 通知渠道(Notification Channels),以提供统一的系统来帮助用户管理通知,如果是针对 android O 为目标平台时,必须实现一个或者多个通知渠道,以向用户显示通知。比如聊天软件,为每个聊天组设置一个通知渠道,指定特定声音、灯光等配置。

​ 解决方案:

	NotificationChannel channel = new NotificationChannel("1","channel_name",NotificationManager.IMPORTANCE_HIGH);
	 NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
     notificationManager.createNotificationChannel(channel);
     
     //另外在Build构造器中添加.setChannelId("1")
        

做完这些通知才能够正常弹出。

发布了2 篇原创文章 · 获赞 2 · 访问量 54

猜你喜欢

转载自blog.csdn.net/qq_43139259/article/details/103937040