目录
2.1 首先拿到通知管理器 NotificationManager
2.2 创建通知渠道 NotificationChannel
一、通知
通知就是字面义,可以在程序关闭或者在后台运行时发送一条消息给用户,提醒用户。用户收到通知之后,会有一个图标出现在上方,还可以下拉查看详细信息,可以点击进入app的某个活动。
通知可以在活动中创建,可以在广播接收器中创建,也可以在服务中创建。
自Android8.0之后,通知的使用有了很大的变化,在这其中我们必须用到的一个新的东西就是通知渠道,NotificationChannel。
二、通知创建的步骤
2.1 首先拿到通知管理器 NotificationManager
通知都是由一个通知管理器来管理的,因此在创建通知或者控制通知之前需要先拿到一个通知管理器NotificationManager:
NotificationManager manager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2.2 创建通知渠道 NotificationChannel
通知渠道就是每一个通知所属的一个渠道,对不同种类的通知进行了分类。这是android 8.0之后的,目的是为了用户能够更好的管理通知,同时也可以避免一些流氓通知(之前的弊端,和运行时权限的作用有点类似)。
2.2.1 创建通知渠道的步骤
【1】如果手机版本的sdk大于26的话 那么就需要为每一个通知设置一个通知渠道
【2】构造出通知渠道的对象,传入三个参数-----通知渠道id,通知渠道名字name,通知渠道重要性importance
【3】调用NotificationManager通知管理器的createNotificationChannel()方法,传入参数------通知渠道对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
String channelId = "chat";
String channelName = "聊天消息";
int channelImportance = NotificationManager.IMPORTANCE_HIGH;
createNotificationChannel(channelId,channelName,channelImportance);
channelId = "subscribe";
channelName = "订阅信息";
channelImportance = NotificationManager.IMPORTANCE_DEFAULT;
createNotificationChannel(channelId,channelName,channelImportance);
}
}
@TargetApi(Build.VERSION_CODES.O)
private void createNotificationChannel(String channelId,String channelName,int importance){
NotificationChannel channel = new NotificationChannel(channelId,channelName,importance);
NotificationManager notificationManager = (NotificationManager)
this.getSystemService(NOTIFICATION_SERVICE);
notificationManager.createNotificationChannel(channel);
}
其中importance我们开发人员只是设置一个默认值而已,用户可以根据自己的需要进行更改。
2.3 创建通知 Notification实例对象
2.3.1 创建通知实例对象的步骤
【1】构造出一个通知对象
首先需要构造出通知的对象。构造对象的方法之一 -------> 利用new 类名.Builder(上下文,通知渠道id).build()的方式进行构造。但是注意,这里的类名我们为了考虑安卓中各个版本兼容性,我们不直接使用Notification,而是使用NotificationCompat来进行构造。上下文就是当前上下文了,然后通知渠道id就是我们上面自己创建的通知渠道id。注意两个要点:第一就是创建一个对象的时候可以用Builder.build()来创建对象,第二就是要考虑到适配的问题,使用带compat的来作为一个类。
【2】给通知对象设置一些连缀
然后具体的通知相关内容就是可以在.build()方法那里设置连缀。
【3】调用NotificationManager的notify方法将通知进行显示
最后调用管理器的notify()方法
Notification notification = new NotificationCompat.Builder(this,"chat")
.setContentTitle("收到一条会话消息")//通知标题
.setContentText("今晚吃什么?")//通知内容
.setWhen(System.currentTimeMillis())//设置显示发送通知在什么时候
.setSmallIcon(R.drawable.ic_launcher_background)//通知的小图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher_foreground))//通知的大图标
.setAutoCancel(true)//用于设置是否点击之后自动取消
.build();//最终构建出通知
manager.notify(1,notification);//调用通知,同时传入这个通知的id(具有唯一性)
三、通知的进阶技巧
通知的进阶技巧主要就是设置通知的点击事件
3.1 通知的点击事件
需要利用PendingIntent,PendingIntent类似于intent,但是不是即刻执行的,而是在某个合适的时机去执行的,可以理解为一个延时执行的intent。
创建出PendingIntent对象,这个类有三个静态方法可以构造出这个对象:getActivity(),getService(),getBroadCast();传入的参数见代码:
然后为通知对象设置一个连缀.setContentIntent()就行了,这样点击通知之后就会跳转了。
Intent intent &