Android开发学习之通知

Posted 哈喽喔德

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发学习之通知相关的知识,希望对你有一定的参考价值。

(学习参考书:第一行代码第2版)

一、创建通知

通知(Notification)是android系统中的特色功能。当程序希望向用户发出提示信息,而程序又不在前台运行时,就可以借助通知实现。通知的用法较为灵活,既可以在活动中创建也可以在广播接收器、服务里创建。相比于广播接收器和服务,活动中创建的情况较少。无论在哪里创建,整体步骤相同:

  1. 首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取。该方法可以通过Android系统级服务的句柄,返回相应对象。该方法接收一个字符串参数用于确定获取系统的哪一个服务。传入Context.NOTIFICATION_SERVICE即可
  2. 判断Android系统版本,因为在Android8.0引入了通知渠道,如果在8.0以上版本实现通知,需要创建一个NotificationChannel对象。使用NotificationChannel的构造方法创建时,需要传入三个参数:(1)唯一识别的id(2)对象名字(3)通知重要程度(如下):
IMPORTANCE_NONE关闭通知
IMPORTANCE_MIN开启通知,不会弹出,但没有提示音,状态栏中无显示
IMPORTANCE_LOW开启通知,不会弾出,不发出提示音,状态栏中显示
IMPORTANCE_DEFAULT开启通知知,不会弹出,发出提示音,状态栏中显示
IMPORTANCE_HIGH开启通知知,会弹出,发出提示音,状态栏中显示
  1. 然后让NotificationManager对象调用manager.createNotificationChannel()方法,传入创建好的NotificationChannel对象

  2. 使用NotificationCompat类的Builder构造器来创建Notification对象传入两个参数:(1)context(2)NotificationChannel对象的id;在最终的build()方法之前连缀多个设置方法来创建一个丰富的Notification对象

setContentTitle() 指定通知的标题
setContentText() 指定通知的正文内容
setWhen() 指定通知被创建的时间,以毫秒为单位,下拉状态栏,指定时间会显示在相应通知上。
setSmallIcon() 设置通知的小图标,显示在状态栏上。(只能使用纯alpha图层设置)
setLargeIcon() 设置通知的大图标,即下拉通知栏显示
setColor()设置小图标的颜色
setContentIntent()设置点击通知后的跳转意图
setAutoCancel()设置点击通知后自动清除通知

  1. 调用NotificationManager的notify()方法就可以让通知显示。notify()接收两个参数,第一个参数是id,要保证为每个通知指定的id是不同的;第二个参数是Notification对象,即将创建好的对象传入。

完整代码如下:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
	NotificationChannel notificationChannel = new NotificationChannel("id1", "name", NotificationManager.IMPORTANCE_HIGH);
    if (manager != null) {
		manager.createNotificationChannel(notificationChannel);
    }
}
Notification notification = new NotificationCompat.Builder(this, "id1")
	.setContentTitle()
	.setContentText()
	.setWhen()
	.setSmallIcon()
	.setLargeIcon()
	.build();
manager.notify(1,notification);

二、通知的点击事件

要想实现通知的点击效果,还需要在代码中进行相应的设置,需要使用到PendingIntent。它与Intent类似,都可以指明某一个意图,都可以用于启动活动、启动服务以及发送广播。不同的是,Intent更加倾向于去立即执行某个动作,PendingIntent更加倾向于在某个合适的时机去执行某个动作。可以将PendingIntent理解为延迟执行的Intent。
PendingIntent提供了几个静态方法用于获取PendingIntent的实例,可以根据需求选择:

getActivity()getBroadcast()getService()

这几个方法接收参数相同,第一个参数是Context;第二个一般传入0;第三个是Intent对象,通过这个对象构建出PendingIntent的意图;第四个用于确定PendingIntent的行为,通常也传入0。
要使用PendingIntent意图,则在构造器中添加方法setContentIntent(),参数传入一个PendingIntent对象。
如果要实现点击后通知的消失,有两种方法。其一是在构造器中调用setAutoCancel()方法;其二是调用NotificationManager的cancel()方法,传入创建时指定的id。

三、通知进阶技巧

NotificationCompat.Builder中提供了非常丰富的API来让我们创建多样的通知效果。常用的进阶API有:
setSound() 在通知发出的时候播放一段音频,接收一个Uri参数,所以在指定音频文件时要先获取音频文件对应的URI

setVibrate() 在通知到来时让手机振动,参数是一个长整型数组,用于设置手机静止和振动的时长,以毫秒为单位。下标0表示静止时长、下标为1表示振动时长、下标为2又表示静止时长、下标为3又表示振动时长,以此类推。振动需要在AndroidManifest加入声明:

<uses-permission android:name=”android.permission.VIBRATE”>

setDefaults() 默认通知效果,会根据当前手机环境播放铃声和振动

setStyle() 允许构建富文本的通知内容。该方法接收一个NotificationCompat.Style参数,即使用该参数构建富文本信息。

以上是关于Android开发学习之通知的主要内容,如果未能解决你的问题,请参考以下文章

Android开发学习之Material Design

Android开发学习之Material Design

Android开发学习之位置服务

Android开发学习之探究服务

Android开发学习之网络技术

Mac + Appium + Java1.8学习之Android模拟器自动化测试脚本开发以及简易例子