使用通知

通知(Notification)是当某个应用程序希望像用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。

通知的基本用法

首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。此方法接收一个字符串参数用于确定获取系统的那个服务,这里传入Context.NOTIFICATION_SERVICE即可。

接下来需要使用一个Builder构造器来创建Notification对象,这里需要使用support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证的程序在所有的Android系统版本上都能正常工作了。代码如下所示:

Notification notification = new NotificationCompat.Builedr(context,channelId).build();

这里由于Android系统的升级,NotificationCompat.Buileder(context)被上面的方法所取代,这里只需要添加一个一个String参数即可。而channelId的实际作用是将notification进行分类,如设置不同优先级等。我们可以在最终的build()方法前连缀任意多的设置方法来创建一个丰富的Notification对象。下面介绍一些最基本设置:

  • setContentTitle()用于指定通知标题内容
  • serContentText()用于指定通知正文内容
  • setWhen()用于指定通知被创建的时间,以毫秒为单位
  • setSmallIcon用于设置通知的小图标,注意只能用纯alpha图层的图片进行设置
  • setLargeIcon()用于设置大图标

以上工作完成后,只需要调用NotificationManager的notify()方法就可以让通知显示出来了。此方法接收两个参数,第一个是id,要保证每个通知所指定的id都是不同的,第二个是Notification对象,因此显示一个通知就可以写成:

manager.notify(1,notification);

若想要用户点击这条通知后启动另外一个活动,我们需要用到PendingIntent,即在某个合适的时机去指向某个动作。它的用法如下:

PendingIntent主要提供了几个静态方法用于获取实例。可以根据需求来选择使用getActivity()方法,getBroadcast()方法,还是getService()方法。三个方法所接收的参数都是相同的,第一个仍然是Context,第二个一般用不到,传入0即可,第三个是一个Intent对象,可以通过这个对象构造出PendingIntent的“意图”,第四个用于确定PendingIntent的行为,有四种值可以做选择:SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT,通常情况下传入0即可。

NotificationCompat.Builder这个构造器还可以再连缀一个setContentIntent()方法,接收的参数正是一个PendingIntent对象,因此这里就可以通过PendingIntent构建出一个延迟执行的“意图”,当用户点击这条通知时就会执行相应的逻辑。

如何在点击通知后对通知的图标进行取消操作,有以下两种方法:

  • 在NotificationCompat.Builder中再连缀一个setAutoCancel()方法,传入参数为true
  • 显示调用NotificationManager的cancel()方法将它取消,写法——
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    manager.cancel(1);
    

    这里的1就是通知的id。

通知的进阶技巧

  1. 在通知发出的时候播放一条音频:setSound()方法。此方法接收一个Uri参数,所以在指定音频文件的时候还需要先获取到音频文件对应的URI。比如,setSound(Uri.fromFile(new File("/system/media/audio/ringtones/:una.ogg")))
  2. 在通知到来的时候让手机震动:setVibrate()方法。这个属性是一个长整型数组,用于设置的手机静止和震动的时长,以毫秒为单位。下标为偶数表示静止时长,下标为奇数表示震动时长。例如,setVibrate(new long[] {0,1000,1000,1000})。想控制手机震动还需要声明权限,在AndroidManifest.xml文件中加入:<uses-permission android:name="android.permission.VIBRATE"/>。
  3. 通知到来时控制手机LED灯显示:setLight()。此方法接收3个参数,第一个用于指定颜色,第二个用于指定亮起的时长,第三个用于指定暗去的时长,均是以毫秒为单位。例如:setLight(Color.GREEN,1000,1000)
  4. 使用默认效果:setDefaults(NotificationCompat.DEFAULT_ALL)
发布了25 篇原创文章 · 获赞 18 · 访问量 2116

猜你喜欢

转载自blog.csdn.net/weixin_43568110/article/details/96623874
今日推荐