Android 通知

通知

通知是指 Android 在应用界面之外显示的消息,旨在向用户提供提醒、来自他人的通信或应用中的其他实时信息。用户可以点按通知以打开您的应用,或直接从通知中执行操作。
通知在状态栏中显示为图标,在抽屉式通知栏中显示更详细的条目,并在应用图标上显示一个标志。通知还会显示在配对的穿戴式设备上。
在这里插入图片描述

基本用法

需要在清单文件中配置通知权限

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

1. 创建通知渠道

从 Android 8.0(API 级别 26)开始,所有通知都必须分配到一个渠道。

	// 获取 NotificationManager 对象来管理通知
	NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
	
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
			NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
                    "meMusic message", NotificationManager.IMPORTANCE_HIGH);
            manager.createNotificationChannel(channel);  //注册通知渠道
	}

public NotificationChannel(String id, CharSequence name, @Importance int importance)
需要创建一个NotificationChannel对象,第一个id是唯一渠道 ID,第二个name是用户可见名称,可以自定义,第三个importance是通知重要程度,它是NotificationManager 中定义的常量属性值,主要有以下五个:

  • IMPORTANCE_NONE 无。关闭通知
  • IMPORTANCE_MIN 小。开启通知,不会弹出,没有提示音,状态栏中不显示
  • IMPORTANCE_LOW 低。开启通知,不会弹出,没有提示音,但状态栏中显示
  • IMPORTANCE_DEFAULT 默认。开启通知,不会弹出,但有提示音,状态栏中显示
  • IMPORTANCE_HIGH 高。开启通知,会弹出,发出提示音,状态栏中显示

2. 创建通知

创建通知时需要用到NotificationManager 和 NotificationCompat 两个类。NotificationManager是状态栏通知的管理类,负责发通知,清除通知等操作。NotificationCompat可以兼容不同版本的 Notification。

        // 1.获取 NotificationManager 对象来管理通知
        NotificationManager manager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 2.通过NotificationCompat对象的构造器类来设置通知栏的属性
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNAL_ID)
                .setContentTitle("这是通知标题")
                .setContentText("这是通知内容")
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.mipmap.ic_launcher)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setLargeIcon(BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher));
        // 3.创建notification对象
        Notification notification = builder.build();
        // 4.发送/更新通知内容
        manager.notify(1888,notification); //1888为自定义通知唯一id

3. 更新通知

builder.setContentText("来新的消息了");
manager.notify(1888,notification);

4. 设置点击事件

设置通知的点击事件需要用PendingIntent的类,它和Intent一样,都能够执行某些动作,包括启动活动、服务,或发送广播等。 但它有和Intent也有些不同之处:Intent倾向于立即去执行某个动作,而PengdingIntent更倾向于在某个合适的时机去执行某个动作,即延迟执行Intent。
一般通过PendingIntent类的getActivity()、getBroadcast()或getService()其中一个方法获取实例。

//获取 PendingIntent 对象,意图是点击通知后打开应用主页面
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
...
// 通过NotificationCompat对象的构造器类来设置通知栏的属性
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentIntent(pi)   //设置通知点击事件
.setAutoCancel(true)    //通知被点击后自动消失

public static PendingIntent getService(Context context, int requestCode, @NonNull Intent intent, @Flags int flags)
getService参数: 第一个Context,第二个requestCode,第三个Intent目的意图,第四个flags:

  • FLAG_ONE_SHORT:该 PendingIntent 只作用一次。
  • FLAG_NO_CREATE:如果当前系统中不存在相同的 PendingIntent 对象,系统将不会创建该 PendingIntent 对象而是直接返回 null 。
  • FLAG_CANCEL_CURRENT:如果当前系统中已经存在一个相同的 PendingIntent 对象,那么就将先将已有的 PendingIntent 取消,然后重新生成一个 PendingIntent 对象。
  • FLAG_IMMUTABLE:创建的PendingIntent不可变,API23加入。
  • FLAG_UPDATE_CURRENT:如果系统中已存在该 PendingIntent 对象,那么系统将保留该 PendingIntent 对象,但是会使用新的 Intent 来更新之前 PendingIntent 中的 Intent 对象数据,例如更新 Intent 中的 Extras。
    具体参考:https://developer.android.google.cn/develop/ui/views/notifications/navigation?hl=zh-cn

如果您的应用正在运行前台服务(一种在后台运行且生命周期长且用户可察觉到的 Service,如媒体播放器),则需要发出通知。此通知不能像关闭其他通知一样关闭。如需移除通知,必须停止运行服务或从前台状态中移除服务。

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android通知栏源码是Android操作系统中负责显示和管理通知的代码。通知栏是Android系统的一个核心功能,它允许应用程序在后台发送通知给用户,以提醒用户有新的消息、事件或提醒。 Android通知栏源码主要包括以下几个关键模块: 1. NotificationManager:通知管理器,负责发送和取消通知。通过调用NotificationManager的方法,应用程序可以发送不同类型的通知到系统通知栏。例如,可以发送文本通知、图像通知、宽展式通知等。同时,NotificationManager也负责取消通知,当用户点击通知或应用程序关闭时,就可以取消通知。 2. Notification:通知实体,负责定义通知的各种属性。通过构建Notification对象并设置各种属性,应用程序可以自定义通知的外观和行为,例如设置通知的标题、内容、图标、声音、振动等。同时,Notification也可以设置通知的点击行为,比如打开一个Activity或触发一个广播。 3. NotificationChannel:通知渠道,负责管理不同类型的通知。从Android 8.0开始,引入了通知渠道的概念,它允许应用程序为不同类型的通知指定不同的设置。比如,应用程序可以为消息通知和推送通知分别创建不同的通知渠道,并为它们设置不同的优先级、声音、振动等属性。 Android通知栏源码的实现原理是通过发送Notification对象到系统通知栏,系统会根据Notification的属性来展示通知通知栏源码提供了丰富的API和方法,开发者可以根据自己的需求来定制通知栏的外观和行为。 通过使用Android通知栏源码,开发者可以实现各种通知功能,如展示新消息、显示推送通知、提醒用户事件等。利用通知栏,可以提高应用与用户之间的交互和通信效率,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值