基础Android之通知栏Notification

本文详细介绍如何在Android中创建和管理通知栏通知,包括基本的通知构建、自动取消通知、响应点击事件的方法以及如何设置复杂的样式和优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      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就讲到这里吧,大家有喜欢的可以顶一下哈,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值