Android通知栏-Notification(通知消息)
青木原森林1.概述
当应⽤程序在后台运⾏,希望向⽤户发出⼀些提⽰学习,就需要借助Notification(通知)来实现。在发出⼀条通知后,⼿机最上⽅的状态栏会显⽰⼀个通知的图标,下拉状态栏后就可以看到通知的详细内容。
1.1 视图分类
Notification有两种视觉风格,⼀种是标准视图(Normal View),另外⼀种是⼤视图(Big view)。标准视图在Android中各版本是通⽤的,但是对于⼤视图⽽⾔,仅⽀持Android4.1+的版本。
1.2 标准视图
从官⽅⽂档了解到,⼀个标准视图显⽰的⼤⼩保持在64dp⾼。如下图所⽰:
其属性描述如下:
1代表: 通知标题
2代表: ⼤图标
3代表: 通知内容
4代表: 通知消息
5代表:⼩图标
6代表: 通知时间,⼀般为系统时间,也可以使⽤setWhen()设置。
1.3 ⼤视图
对于⼤视图(Big View)⽽⾔,它的细节区域只能显⽰256dp⾼度的内容,并且只对Android4.1+之后的设备才⽀持,它⽐标准视图不⼀样的地⽅,均需要使⽤setStyle()⽅法设定,它⼤致的效果如下:
Android为我们提供了三个实现类,⽤于显⽰不同的场景。分别是:
Notification.BigPictureStyle, 在细节部分显⽰⼀个256dp⾼度的位图。
Notification.BigTextStyle,在细节部分显⽰⼀个⼤的⽂本块。
Notification.InboxStyle,在细节部分显⽰⼀段⾏⽂本
Notification.FLAG_SHOW_LIGHTS //三⾊灯提醒,在使⽤三⾊灯提醒时候必须加该标志符
Notification.FLAG_ONGOING_EVENT //发起正在运⾏事件(活动中)
Notification.FLAG_INSISTENT //让声⾳、振动⽆限循环,直到⽤户响应 (取消或者打开)
Notification.FLAG_ONLY_ALERT_ONCE //发起Notification后,铃声和震动均只执⾏⼀次
Notification.FLAG_AUTO_CANCEL //⽤户单击通知后⾃动消失
Notification.FLAG_NO_CLEAR //只有全部清除时,Notification才会清除 ,不清楚该通知(QQ的通知⽆法清除,就是⽤的这个。
还有百度通知栏⾥⾯的搜索框也是这个)。
使⽤⽅法:在设置完属性后,设置
Notification notification = builder.build();
掌声是什么能什么补充句子完整notification.flags = Notification.FLAG_ONLY_ALERT_ONCE;
--------------------------------
原⽂:blog.csdn/dsc114/article/details/51721472
2.基本⽤法
通知可以在活动⾥⾯创建,也可以在⼴播接收器⾥⾯创建,也可以在服务⾥⾯创建。下⾯介绍创建通知的步骤:
2.1 创建⼀个NotificationManager
揭阳美食创建⼀个NotificationManager来对通知进⾏管理。通过调⽤SystemService(String s)⽅法获取到
NotificationManager实例对象,字符串s参数⽤于确定获取系统的哪个服务,这⾥传⼊Context.NOTIFICATION_SERVICE即可,如下所⽰:
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
其中,Context.NOTIFICATION_SERVICE的值为:notification
public abstract class Context {
......
public static final String NOTIFICATION_SERVICE = "notification";
}
2.2 使⽤Builder构造器来创建Notification对象
在这⾥需要注意的是,为了解决API不稳定性问题和新⽼版本的兼容问题,使⽤support-v4提供的NotificationCompat类的Builder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常⼯作。同时,Android8.0开始,废弃了
Builder(@NonNull Context context)⽅法,改⽤public Builder(@NonNull Context context, @NonNull String channelId),如下所⽰:
//创建Notification,传⼊Context和channelId
Notification notification = new NotificationCompat.Builder(this, "chat")
.setAutoCancel(true)
.setContentTitle("收到聊天消息")
.setContentText("今天晚上吃什么")
.setWhen(System.currentTimeMillis())
.
setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.setContentIntent(pendingIntent)
//在build()⽅法之前还可以添加其他⽅法
.build();
Builder构造器其中⼀些⽅法说明如下:
setAutoCancel(boolean boolean)设置点击通知后⾃动清除通知
setContent(RemoteView view)设置⾃定义通知
setContentTitle(String string)设置通知的标题内容
setContentText(String string)设置通知的正⽂内容
setContentIntent(PendingIntent intent)设置点击通知后的跳转意图
如何辨别玉的好坏品质
setWhen(long when)设置通知被创建的时间
setSmallIcon(int icon)设置通知的⼩图标
注意:只能使⽤纯alpha图层的图⽚进⾏设置,⼩图标会显⽰在系统状态栏上
setLargeIcon(Bitmap icon)设置通知的⼤图标
下拉系统状态栏时就能看见
setPriority(int pri)设置通知的重要程度
setStyle(Style style)设置通知的样式
⽐如设置长⽂字、⼤图⽚等等
setVisibility(int defaults)设置默认
setLight(int argb, int onMs, int offMs)设置呼吸闪烁效果setSound(Uri sound)设置通知⾳效
setVibrate(long[] pattern)设置震动效果,数组包含⼿机静⽌时长和震动时长
下标0代表⼿机静⽌时长
下标1代表⼿机整的时长
下标2代表⼿机静⽌时长
下标3,4,5.......以此类推
圆脸适合剪什么发型还需要在l中声明权限:
<uses-permission android:name="android.permission.VIBRATE"/>
setColor(int argb)设置通知栏颜⾊
setCategory(String category)设置通知类别
setFullScreenIntent(PendingIntent intent, boolean b)设置弹窗显⽰
其中setPriority(int pri)⽅法参数⼀共有5个常量值可选,调⽤NotificationCompat的常量值,如下所⽰:
其中setPriority(int pri)⽅法参数⼀共有5个常量值可选,调⽤NotificationCompat的常量值,如下所⽰:
public class NotificationCompat {
.......
//默认的重要程度,和不设置效果是⼀样的
public static final int PRIORITY_DEFAULT = 0;
//最低的重要程度,系统可能只会在特定的场合显⽰这条通知
public static final int PRIORITY_MIN = -2;
//较低的重要程度,系统可能会将这类通知缩⼩,或改变其显⽰的顺序
public static final int PRIORITY_LOW = -1;
//较⾼的重要程度,系统可能会将这类通知放⼤,或改变其显⽰的顺序
public static final int PRIORITY_HIGH = 1;
//最⾼的重要程度,表⽰这类通知消息必须让⽤户看到,甚⾄做出响应
public static final int PRIORITY_MAX = 2;
世界十大高智商电影}
注意:当设置最⾼重要程度后,其显⽰效果和QQ发送好友消息⼀样,如果正在其他APP内,消息会显⽰在屏幕上让⽤户看见2.3 调⽤NotificationManager的notify(int id, Notification notification)让通知显⽰
notify()⽅法接收两个参数,其中id表⽰每个通知所指定的id,要不⼀样。代码如下:
使⽤此⽅法前,需要将NotificationChannel(通知渠道创建出来)
2.4 让通知从状态栏消失⽅法
有两种⽅法,⼀种是上⾯创建Notification时,添加setAutoCancel(true),另外⼀种就是通过动态代码⽅
式,NotificationManager.cancel(int id),如下:
//传⼊对应通知的id
notificationManager.cancel(1);
3.NotificationChannel(通知渠道)
3.1 概述
从Android 8.0系统开始,Google引⼊了通知渠道这个概念。
什么是通知渠道呢?顾名思义,就是每条通知都要属于⼀个对应的渠道。每个App都可以⾃由地创建当前App拥有哪些通知渠道,但是这些通知渠道的控制权都是掌握在⽤户⼿上的。⽤户可以⾃由地选择这些通知渠道的重要程度,是否响铃、是否振动、或者是否要关闭这个渠道的通知。
即NotificationChannel 其实是把 Notification 分了个类别,设置不同优先级,开关之类的。如果你的 app 适配了的话,⽤户可以关掉不喜欢的通知,以提⾼⽤户体验。
拥有了这些控制权之后,⽤户就再也不⽤害怕那些垃圾推送消息的打扰了,因为⽤户可以⾃主地选择
⾃⼰关⼼哪些通知、不关⼼哪些通知。举个具体的例⼦,我希望可以即时收到⽀付宝的收款信息,因为我不想错过任何⼀笔收益,但是我⼜不想收到⽀付宝给我推荐的周围美⾷,因为我没钱只吃得起公司⾷堂。这种情况,⽀付宝就可以创建两种通知渠道,⼀个收⽀,⼀个推荐,⽽我作为⽤户对推荐类的通知不感兴趣,那么我就可以直接将推荐通知渠道关闭,这样既不影响我关⼼的通知,⼜不会让那些我不关⼼的通知来打扰我了。
对于每个App来说,通知渠道的划分是⾮常需要仔细考究的,因为通知渠道⼀旦创建之后就不能再修改了,因此开发者需要仔细分析⾃⼰的App⼀共有哪些类型的通知,然后再去创建相应的通知渠道。
这⾥我们来参考⼀下Twitter的通知渠道划分,如下所⽰:
可以看到,Twitter就是根据⾃⼰的通知类型,对通知渠道进⾏了⾮常详细的划分,这样⽤户的⾃主选择性就⽐较⾼了,也就⼤⼤降低了⽤户不堪其垃圾通知的骚扰⽽将App卸载的概率。
---------------------
原⽂:blog.csdn/guolin_blog/article/details/79854070
3.2 创建NotificationChannel
代码如下所⽰:
public class NotificationUtil {
private static final int NOTIFICATION_MUSIC_ID = 10000;
private static NotificationManager notificationManager;
......
//初始化NotificationManager
private static void initNotificationManager(Context context){
if (notificationManager == null){
notificationManager = (NotificationManager) SystemService(NOTIFICATION_SERVICE);
}
//判断是否为8.0以上:Build.VERSION_CODES.O为26
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论