详解 Android 通知栏

一、通知栏简介

通知栏是 Android 应用程序开发中非常重要的一部分,它可以为用户显示未读消息、提醒等,也可以让用户快速进入应用程序。您可以通过通知栏,向用户发送通知消息,比如新消息、新邮件、任务完成等等,这对于抢占用户注意力大有裨益。

二、基础通知栏功能

通知栏具有一些基本的功能,包括展示通知、清除通知、进入应用程序、通知栏折叠和展开。

1、展示通知

下面是通过函数创建的最基础的通知:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT);
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent,
        PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

2、清除通知

用户可以通过点击通知栏中的 “清除” 或者 “全部清除” 按钮来清除通知。您也可以通过以下方式来手动清除通知:

notificationManager.cancel(NOTIFICATION_ID);

3、进入应用程序

当用户点击通知栏中的通知时,应用程序会被自动唤醒。您可以使用以下代码片段打开您的应用程序:

Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
        notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);

4、通知栏折叠和展开

通知栏默认是展开的,用户可以通过向下滑动通知栏来切换到折叠模式。在折叠模式下,通知栏只会展示基本信息,并显示通知图标。您可以添加以下代码来支持通知栏的折叠和展开:

NotificationCompat.BigTextStyle bigTextStyle = new NotificationCompat.BigTextStyle();
bigTextStyle.setBigContentTitle("Big Text Notification");
bigTextStyle.bigText("This is a big text notification,……");
builder.setStyle(bigTextStyle);

三、高级功能

通知栏也具有一些高级的功能,包括声音、震动、悬挂式通知、影响性能的功能等。

1、声音和震动

通知栏支持为通知添加声音和震动效果。以下代码为通知添加了默认的声音和震动效果:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setDefaults(Notification.DEFAULT_ALL);

2、悬挂式通知

通知栏支持显示悬挂式通知,类似于 Facebook Messenger 或者搜狗输入法的方式。以下代码为通知添加了悬挂式通知效果:

Intent resultIntent = new Intent(this, ResultActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(
                0,
                PendingIntent.FLAG_UPDATE_CURRENT
        );
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setContentIntent(resultPendingIntent)
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setFullScreenIntent(resultPendingIntent, true);

3、影响性能的功能

通知栏也包含一些影响性能的高级功能,比如:折叠式通知、消息计数器、进度条和自定义视图。

3.1 折叠式通知

折叠式通知是一种可以折叠和展开的通知,用户可以通过向下滑动通知栏来切换是否展示详细信息。以下代码为通知添加了折叠式通知效果:

NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
String[] messages = {"Hello World!", "Meeting at 6 pm!", "Don't forget to bring the document!"};
inboxStyle.setBigContentTitle("Inbox Notification");
for (int i = 0; i < messages.length; i++) {
    inboxStyle.addLine(messages[i]);
}
builder.setStyle(inboxStyle);

3.2 消息计数器

消息计数器是一种非常有用的功能,它可以为用户显示未读消息个数。消息计数器通常会显示在应用程序图标上。以下代码为通知添加了消息计数器效果:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setNumber(3);

3.3 进度条

进度条通知是一种在通知栏中显示进度条的通知。以下代码为通知添加了进度条效果:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setProgress(100, 50, false);

3.4 自定义视图

还可以使用自定义视图来创建复杂的通知。以下代码为通知添加了自定义视图效果:

RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.custom_notification);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setCustomContentView(remoteViews);

四、总结

通知栏是 Android 应用开发中不可或缺的一部分,它能够向用户展示未读消息、提醒等,让用户快速进入应用程序。本文介绍了通知栏的基本功能和高级功能,包括展示通知、清除通知、进入应用程序、通知栏折叠和展开、声音、震动、悬挂式通知、折叠式通知、消息计数器、进度条和自定义视图。

原创文章,作者:LEVRL,如若转载,请注明出处:https://www.506064.com/n/332235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LEVRL的头像LEVRL
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相关推荐

  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • Java实现告警通知的全面解析与示例

    本文将从多个方面详细阐述如何使用Java实现告警通知,包括如何设置告警规则、如何获取告警信息、如何发送告警通知等。本文将给出完整的代码示例,并且介绍如何运行代码并验证效果。 一、告…

    编程 2025-04-27
  • Android Studio HUD 实现指南

    本文将会以实例来详细阐述如何在 Android Studio 中使用 HUD 功能实现菊花等待指示器的效果。 一、引入依赖库 首先,我们需要在 build.gradle 文件中引入…

    编程 2025-04-27
  • Android和Vue3混合开发方案

    本文将介绍如何将Android和Vue3结合起来进行混合开发,以及其中的优势和注意事项。 一、环境搭建 在进行混合开发之前,需要搭建好相应的开发环境。首先需要安装 Android …

    编程 2025-04-27
  • Android Java Utils 可以如何提高你的开发效率

    Android Java Utils 是一款提供了一系列方便实用的工具类的 Java 库,可以帮助开发者更加高效地进行 Android 开发,提高开发效率。本文将从以下几个方面对 …

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25

发表回复

登录后才能评论