Android NotificationManager详解

汪泓
2023-12-01

1.获取NotificationManager的实例

调用Context的getSystemService()方法获取,getSystemService()方法接收一个字符串参数用于确定获取系统那一个服务,这里是Context.NOTIFICATION_SERVICE。

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

2.创建Notification对象

创建Notification对象需要使用Builder构造器,但是几乎每个版本都会对Notification进行或多或少的修改,导致API不稳定,所以使用NotificationCompat类的构造器创建Notification对象。(NotificationCompat已被放弃使用)

Notification notification = new NotificationCompat.Builder(context).build();

注:在最终build之前可以连缀任意多的方法创建Notification对象,以下是一些基本的方法:

    Notification notification = new NotificationCompat.Builder(context)
            .setContentTitle(“123”)
            .setContentText(“123”)
            .setWhen(System.currentTimeMills())
            .setSmallIcon(R.drawable.small_icon)
            .setLargeIcon(BitmapFactory.decodeResource(getResource(),R.drawable.large_icon))
            .build();

setContentTitle():指定通知栏内容的标题;

setContentText():指定通知栏内容;

setWhen():指定被创建的时间(毫秒为单位);

setSmallIcon():设置通知的小图标;

setLargeIcon():设置通知的大图标

进阶方法:

setSound():接收一个uri参数,设置通知铃声。

.setSound(Uri.fromFile(new File(“/system/media/audio/ringtones/Luna.ogg”)))

setVibrate():接收一个长整型的数组,用于设置手机静止和震动的时长,以毫秒为单位。下标为0的值表示手机静止的时长,下标为1的值表示手机震动的时长,下标为2的值又表示手机手机静止的时长,依次类推。此方法需要添加权限“android.permission.VIBRATE”

.setVibrate(new long[]{0,1000,1000,1000})

setLights():控制手机的LED灯,接收3个参数,第一个参数用于指定LED灯的颜色,第二个参数用于指定LED灯亮起的时长,以毫秒为单位,第三个参数用于指定LED灯暗去的时长,也是可以以毫秒为单位。

.setLights(Color.GREEN,1000,1000)

setDefault():设置默认效果,铃声,震动

.setDefault(NotificationCompat.DEFAULT_ALL)

高级方法:

setStyle():富文本信息,如长段文字.setStyle(new NotificationCompat.BigTextStyle().bigText(“………………”)),显示一张大图

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.big_image)))

setPriority():设置通知的重要程度。接收一个整型参数用于这条通知的重要程度,一共有5个常量值可选:PRIORITY_DEFAULT表示默认的重要程度,和不设置效果是一样的;PRIORITY_MIN表示最低的重要程度,系统可能只会在特定场景才会显示这条通知,比如用于下拉状态栏的时候;PRIORITY_LOW表示较低的重要程度,系统可能会将这类通知缩小,改变其显示的顺序,将其排在更重要的通知之后;PRIORITY_HIGH表示较高的重要程度,系统可能会将这类通知放大,改变其显示的顺序,将其排在比较靠前的位置;PRIORITY_MAX表示最高的重要程度,这类通知必须要让用户立即看到甚至需要用户做出响应操作。

.setPriority(NotificationCompat.PRIORITY_MAX)

3.显示Notification

显示Notification使用NotificationManager类的方法notify(),此方法接收两个参数,第一个参数是id,需要保证每个通知指定的id都是不同的,第二个参数是Notification对象。

manager.notify(1,notification);

4.PendingIntent

PendingIntent和Intent的区别:Intent倾向于立即执行某个意图,PendingIntent倾向于在某个合适的时间执行意图。

获取PendingIntent示例,使用PendingIntent的静态方法获取,根据需要选择getActivity(),getService(),getBroadcast()。这几个方法接收的参数都是相同的,第一个参数Context;第二个参数一般情况用不到,传入0即可;第三个参数是一个Intent对象,通过这个对象构建出PendingIntent的“意图”;第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这四种值可选,通常情况下这个参数传入0。

在NotificationCompat.Builder后面连缀setContentIntent()方法添加PandingIntent对象。

5.点击通知取消

在没有使用setContentIntent()方法的时候,点击通知没有任何反应(此处有点击事件,只是没有相应的动作)。当点击通知后,通知不会消失,会一直显示在状态上。解决方法有两种:一种是在NotificationCompat.Builder后连缀setAutoCancel()方法,一种是显示调用NotificationManager的cancel()方法(需要在执行意图后的Activity或者service中使用NotificationManager调用,传入参数为Notification的id)。

发现错误请指出,谢谢!

有问题欢迎私聊或者发送邮箱(964427082@qq.com)一起讨论

 类似资料: