Android notification

2019-02-24  本文已影响0人  緋村劍心

当app需要给用户提示信息,但是该app又没有运行在前台的时候,就可以利用通知

创建通知

由Notification.Builder创建一个Notification对象,进行各种属性的配置,其中必须配置的属性如下

小图标,使用setSamllIcon()方法设置。

标题,使用setContentTitle()方法设置。

文本内容,使用setContentText()方法设置。

/*

channel的构造函数有三个参数 channel的id,name,和优先级。 创建完channel后通过 NotificationManager的createNotificationChannel(channel)方法添加chanel,并在在notification里设置setChannelId。

*/

String CHANNEL_ID = "my_channel_01";

CharSequence name = "my_channel_01";

String description = "你好世界";

int importance = NotificationManager.IMPORTANCE_LOW;

//Android 8.0开始需要为通知设置channel

NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

channel.setDescription(description);

channel.enableLights(true);

channel.setLightColor(Color.RED);

channel.enableVibration(true);

channel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});

manager.createNotificationChannel(channel);

Notification notification = map.get(id);

if(notification == null) {

    notification = new Notification.Builder(this)

            //设置通知的标题

            .setContentTitle("This is content title")

            // 设置通知的详细信息

            .setContentText(text)

            .setWhen(System.currentTimeMillis())

            .setSmallIcon(R.mipmap.ic_launcher)

            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))

            .setChannelId(CHANNEL_ID)

            .build();

}

发送通知

通知由NotificationManager发送,它是系统级服务,获取方法是(NotificationManager) getSystemService

(NOTIFICATION_SERVICE),获取到notification对象之后,就可以调用NotificationManager.notify()发送通知

更新与移除通知

使用NotificationManager.notify()发送通知的时候,需要传递一个唯一id作为标识符,用于标识这个通知,有时候并不是要无限添加新的通知,而是要更新原有的通知信息,当你发送通知的时候使用的id是一样的话,则会将通知更新为新的notification的内容,而使用cancel(int)来移除一个指定的通知,也可以使用cancelAll()移除所有的通知。

通过点击通知跳转活动

如果我们想要用户点击app发出的通知有反应,比如进入进入一个页面,这里就需要用到pendingIntent.

Intent和PendingIntent的区别,PendingIntent可以看做是对Intent的包装,通过名称可以看出PendingIntent用于处理即将发生的意图,而Intent用来用来处理马上发生的意图。而对于通知来说,它是一系统级的全局通知,并不确定这个意图被执行的时间。当在应用外部执行PendingIntent时,因为它保存了触发应用的Context,使得外部应用可以如在当前应用中一样,执行PendingIntent里的Intent,就算执行的时候响应通知的应用已经被销毁了,也可以通过存在PendingIntent里的Context照常执行它,并且还可以处理Intent所带来的额外信息。

//设置pendingIntent让用户点击通知时跳转活动。

                Intent intent = new Intent(this,NotificationActivity.class);

                PendingIntent pi = PendingIntent.getActivity(this,0 ,intent ,0 );

其中第四个参数是用于标识PendingIntent的构造选择

* FLAG_CANCEL_CURRENT:如果构建的PendingIntent已经存在,则取消前一个,重新构建一个。

* FLAG_NO_CREATE:如果前一个PendingIntent已经不存在了,将不再构建它。

* FLAG_ONE_SHOT:表明这里构建的PendingIntent只能使用一次。

* FLAG_UPDATE_CURRENT:如果构建的PendingIntent已经存在,则替换它,常用

其它Notification设置

设置当用户点击完通知操作后,通知图标就消失:.setAutoCancel(true)

设置通知展开的长文本内容:setStyle(new Notification.BigTextStyle().bigText("文本内容"))

上一篇下一篇

猜你喜欢

热点阅读