基础Android之通知栏Notification

xiaoxiao2021-02-28  96

      Notification很简单,考虑到Android兼容问题,我们需要使用support库中提供的兼容API,NotificationCompat类。下面直接写代码

      

NotificationManager manager = (NotificationManager)getContext().getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new NotificationCompat.Builder(getContext()) .setContentTitle("this is a title") .setContentText("this is a text") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.small_icon) .setLargeIcon(BitmapFactory.decodeResource(getContext().getResources(),R.drawable.large_icon)) .build(); manager.notify(1,notification);        这个代码很好理解,有一点我需要说明一下,notify()的第一个参数是这个通知的Id,如果你写死了,比如都是1,那么下一个通知来的时候就会把这个通知覆盖掉,如果这个id,你每次都写的不一样,那么你的通知栏就会出现多条通知,不会被覆盖。

        我们发送一个通知肯定希望点击通知,该通知消失,然后去执行一个“意图”。我们首先来说说如何点击让通知栏消失。

       第一种方法:

       

NotificationManager manager = (NotificationManager)getContext().getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new NotificationCompat.Builder(getContext()) .setContentTitle("this is a title") .setContentText("this is a text") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.small_icon) .setLargeIcon(BitmapFactory.decodeResource(getContext().getResources(),R.drawable.large_icon)) .setAutoCancel(true) .build(); manager.notify(1,notification);         第二种方法在你跳转后的Activity的onCreate里写

         

NotificationManager manager = (NotificationManager)getContext().getSystemService(Context.NOTIFICATION_SERVICE); manager.cancel(1)            cancel()中传入的1就是通知的ID,传入不同的Id可以取消不同的通知栏。

          下面我们讲讲如何点击通知栏,执行一个“意图”,这个时候我们需要用到pendingIntent类,创建它的实例,根据项目需求选择使用:getActivity(),getBroadcast(),getService().这几个方法传入的参数都是相同的,第一个参数是context,第二个参数传入0即可,第三个参数是intent对象,第四个参数是确定pendingIntent的行为,有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAGE_CANCEL_CURRENT,FLAGE_UPDATE_CURRENT,通常我们传入0即可。然后调用setContentIntent()方法传进去即可。

          

Intent intent = new Intent(this,NotificationActivity.class); PendingIntent pi = PendingIntent.getActivity(this,0,intent,0); NotificationManager manager = (NotificationManager)getContext().getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new NotificationCompat.Builder(getContext()) .setContentTitle("this is a title") .setContentText("this is a text") .setWhen(System.currentTimeMillis()) .setSmallIcon(R.drawable.small_icon) .setLargeIcon(BitmapFactory.decodeResource(getContext().getResources(),R.drawable.large_icon)) .setContentIntent(pi) .build(); manager.notify(1,notification);        其实通知还有很多实用的API,比如setSound()方法

       

setSound(Uri.fromFile(new File("/system/media/audio/ringtones/test.ogg")))      还可以让通知来的时候,让手机振动通知用户。下标0的值表示手机静止的时长,下标为1的值表示手机振动的时长,下标为2的值又表示手机静止的时长,下标3的值表示手机振动的时长,以此类推。比如

      

setVibrate(new long[]{0,1000,1000,1000})       通知来的时候立即振动1s,然后静止1s,再振动1s.

        我们还可以在通知来的时候控制手机的LED手机灯的显示。setLight()方法,第一个参数指定LED灯的颜色,第二个参数指定LED灯亮起的时长,以毫秒为单位,第三个参数用于指定LED灯暗去的时长。如果想实现LED灯一闪一闪的效果,就可以这么写

 

setLight(Color.GREEN,1000,1000)      当然如果你不想弄那么多复杂的设置,也可以直接使用通知的默认效果

setDefault(NotificationCompat.DEFAULT_ALL);        值得一提的还有一个方法,那就是setStyle()方法,这个方法允许我们构建出复杂的通知内容,也就是说不光可以有文字和图标,还可以包含更多,它接收一个NotificationCompat.Style参数。

     如果我们想设置很长的文字,我们就可以用这个方法

     

.setStyle(new NotificationCompat.BigTextStyle().bigText("kfkjfkdjfjlaldjffj jfkajkjfkda " + " fjdkjfkjafjkj kdjfka jakfjkdjk k kfjkajfkafj "))   除了显示长文字,我们还可以显示一张大图片

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource( getContext().getResources(),R.drawable.big_image))   最后我们再看一下setPriority()方法,它是用来设置通知的重要程度的。接收一个整型参数,一共有5个常量值可选:PRIORITY_DEFAULT表示默认的重要程度和不设置是一样的;PRIORITY_MIN表示最低的重要程度,系统可能只会在特定的场景才显示这条通知,比如用户下拉状态栏的时候;PRIORITY_LOW表示较低的重要程度,系统可能会将这类通知缩小,会改变其显示的顺序,将其排在更重要的通知之后;PRIORITY_HIGH表示较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在靠前的位置;PRIORITY_MAX表示最高的重要程度,这类通知消息必须让用户立刻看到,甚至需要用户做出相应操作。

     

setPriority(NotificationCompat.PRIORITY_MAX) 这样状态栏弹出的就不是一个小图标,而是一个横幅,并附带了详细的通知内容,你可以试试看哦。

Notification就讲到这里吧,大家有喜欢的可以顶一下哈,

转载请注明原文地址: https://www.6miu.com/read-30685.html

最新回复(0)