您的位置:

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