Notification 的使用

Notification

随着 Android 版本变更,Notification 的兼容性并不是很好。为了解决版本兼容性问题,应该使用 NotificationCompat.Builder 类来构建 Notification 对象。同时,使用 NotificationManager 对通知进行管理,另外从 Android 8.0 开始引入了 NotificationChannel 通知渠道用来对通知进行分类,因此还需要创建并指定通知渠道。

NotificationChannel

// 获取 NotificationManager 对象
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Android 8.0 及更高版本需要创建 NotificationChannel
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // 第一个参数为 channelId 渠道ID,保证全局唯一
    // 第二个参数为 channelName 渠道名称,可在应用通知管理中的看到
    // 第三个参数为渠道的重要级别,IMPORTANCE_HIGH 需要用户立即看见,并弹出横幅显示内容
    NotificationChannel channel = new NotificationChannel("test", "Test", NotificationManager.IMPORTANCE_DEFAULT);
    manager.createNotificationChannel(channel); // 创建渠道
}

NotificationChannel 的方法对该渠道的所有通知生效:

  • getId():获取 ChannleId
  • enableLights():开启指示灯,如果设备有的话
  • setLightColor():设置指示灯颜色
  • enableVibration():开启震动
  • setVibrationPattern():设置震动频率
  • setImportance():设置频道重要性
  • getImportance():获取频道重要性
  • setSound():设置声音
  • getSound():获取声音
  • setGroup():设置 ChannleGroup
  • getGroup():得到 ChannleGroup
  • setBypassDnd():设置绕过免打扰模式
  • canBypassDnd():检测是否绕过免打扰模式
  • getName():获取名称
  • setLockScreenVisibility():设置是否应在锁定屏幕上显示通知
  • getLockscreenVisibility():检测是否应在锁定屏幕上显示通知
  • setShowBadge():设置是否显示角标
  • canShowBadge():检测是否显示角标

创建并发送 Notification

// 构建时指定 channelId 渠道ID
Notification notification = new NotificationCompat.Builder(this, "test")
        .setContentTitle("This is content title.")  // 设置标题
        .setContentText("This is content text.")    // 设置内容
        .setWhen(System.currentTimeMillis())    // 设置通知时间
        .setShowWhen(true)  // 设置是否显示时间
        .setAutoCancel(true)    // 设置点击后自动取消
        .setSmallIcon(R.mipmap.ic_launcher)   // 小图标在状态栏中显示,从 Android 5.0 开始,状态栏图标只使用 alpha 图层来进行绘制,即图标不带颜色。
        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))   //大图标在下拉状态栏中的通知中显示
        // 注意,这里构建 Bitmap 对象的方式是有问题的,因为 R.mipmap.ic_launcher 是 xml 文件,请使用正常的图片格式,这里仅做示例
        .build();
manager.notify(1, notification);    // 发送通知

Notification 的点击事件

Notification 的点击事件是通过 PendingIntent 去执行实现的,它与 Intent 类似都可以指定一个“意图(行为动作)”,但它并不是 Intent。另外,它需要一个 Intent 对象来获取实例。

Intent intent = new Intent(this, MainActivity.class);
// PendingIntent 对象可以根据需求使用 getActivity() 方法、getBroadcast() 方法或 getService() 方法获取,传入参数都是相同的,以 getActivity() 为例
// 第一个参数为 Context 上下文
// 第二个参数是请求码,通常用不到这里传入 0
// 第三个参数是 Intent 对象
// 第四个参数用于控制 PendingIntent 的可变性,通常用不到这里传入 FLAG_IMMUTABLE,参数具体含义查看官方文档
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);

给 Notification 指定点击事件只需要在构建对象时调用 setContentIntent() 方法,并传入 PendingIntent 对象即可。

Notification notification = new NotificationCompat.Builder(this, "test")
        // ...
        .setContentIntent(pi)    // 设置点击事件
        .build();

使用 setStyle() 方法显示长文字和图片

setContentText(() 方法可以设置通知内容的文字,但文字长度多长是无法显示完整的,多出的部分用省略号代替。嗯,很合理。如果想要显示完整的长文字则应该使用 setStyle() 方法,同时 setContentText() 方法会失效。

Notification notification = new NotificationCompat.Builder(this, "test")
        // ...
        .setStyle(new NotificationCompat.BigTextStyle().bigText("Amie..."))
        .build();

显示图片也是使用 setStyle() 方法,不过参数样式需要改成 BigPictureStyle,而且 setContentText() 方法依旧生效,文字内容正常显示。

Notification notification = new NotificationCompat.Builder(this, "test")
        // ...
        // 构建 Bitmap 对象请使用正常的图片格式,这里仅做示例
        .setStyle(new NotificationCompat.BigPictureStyle().bigPicture((BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))))
        .build();
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿咩AmieVastness

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值