Android 中各种通知(Notification)的使用

本文详细介绍了Android中各种类型的通知创建,包括基本通知、大文本、图标样式、响应用户点击、操作按钮、直接回复、进度条、分类、锁屏可见性、通知导航及自定义布局。特别强调了从Android 8.0开始的通道(Channel)创建,以及不同场景下的通知重要性级别。同时,文章提到了在不同Android版本和设备上的兼容性问题,例如横幅通知的权限设置和通知Badge的显示差异。
摘要由CSDN通过智能技术生成

通知通道(Channel)

从 Android 8.0 开始,显示通知必须先创建通道:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel notificationChannel = NotificationFactory.createNotificationChannel();
    notificationManager.createNotificationChannel(notificationChannel);
}
@RequiresApi(api = Build.VERSION_CODES.O)
public static NotificationChannel createNotificationChannel() {
    String name = "通道名称";
    // 设置通道的重要性级别(Android 7.1 或更低需要使用 setPriority 方法)
    int importance = NotificationManager.IMPORTANCE_HIGH;
    return new NotificationChannel(CHANNEL_ID, name, importance);
}

在构建 Notification Builder 时也需要传入 Channel ID:

new NotificationCompat.Builder(context, CHANNEL_ID)

通知重要性级别

不同场景下的通知,其重要性也可能不同。下表中列出了不同的重要性级别,以及在不同系统版本上设置的方法:

级别 importance(Android 8.0 及以上) priority(Android 7.1 及以下)
紧急,发出声音并作为警告通知出现 IMPORTANCE_HIGH PRIORITY_HIGH 或者 PRIORITY_MAX
高,发出声音 IMPORTANCE_DEFAULT PRIORITY_DEFAULT
中,没有声音 IMPORTANCE_LOW PRIORITY_LOW
低,没有声音并且不会出现在状态栏中,并且通知会被折叠 IMPORTANCE_MIN PRIORITY_MIN

创建基本通知

基本通知包含小图标、标题和少量内容:

// 从 Android8.0 开始,必须设置 Channel ID
new NotificationCompat.Builder(context, CHANNEL_ID)
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(content)
        // 设置优先级,优先级决定了 Android7.1 及更低版本通知的侵入程度
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .build();

大文本样式通知

new NotificationCompat.Builder(context, channelId)
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(content)
        .setPriority(priority)
        .setStyle(new NotificationCompat.BigTextStyle())
        .build();

带图标样式通知

new NotificationCompat.Builder(context, channelId)
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(content)
        .setPriority(priority)
        .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
        .build();

大图标样式通知

Bitmap iconBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher);
Bitmap avatarBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_avatar);
return new NotificationCompat.Builder(context, channelId)
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(content)
        .setPriority(priority)
        .setLargeIcon(iconBitmap)
        .setStyle(new NotificationCompat.BigPictureStyle()
                .bigPicture(avatarBitmap))
        .build();

响应用户点击

可以通过设置 setContentIntent()方法来定义当用户点击通知后所执行操作:

Intent intent = new Intent(context, NotificationDetailActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
new NotificationCompat.Builder(context, channelId)
        .setSmallIcon(icon)
        .setContentTitle(title)
        .setContentText(content)
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值