详细介绍:Android 开发基础-- 通知

通知

这个是作为自己的笔记来写的

参考资料

Android通知Notification使用全解析,看这篇就够了_android notification-CSDN博客//这个是kotlin的,用ai转成java

Android 通知栏Notification深度全面解析_android statusbarnotification解析-CSDN博客

理论部分

谷歌在安卓8.0以上 推出了通知渠道分类,可以根据通知渠道 禁用接收 某个app 的相关通知

渠道名是开发者指定的,不同渠道的通知可以具有不同的优先级

在安卓8.0以下 , 所有通知一视同仁,没有渠道分类

关键类

  1. NotificationManager 通知管理器,用来发起、更新、删除通知
  2. NotificationChannel 通知渠道,8.0及以上配置渠道以及优先级
  3. NotificationCompat.Builder 通知构造器,用来配置通知的布局显示以及操作相关

理论我也一窍不通,暂时没找到好的网课,直接上使用流程方法

一般来说,通知通过后台发送

使用流程

先在Manifest中声明通知权限,然后代码动态申请一下

1.创建通知渠道

int importstance = NotificationManager.IMPORTANCE_LOW;//优先级
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel("1","普通通知",importstance);
//定义自己的通知渠道 .1参 为 id ,2参为渠道名,3参优先级,这都是自己指定的啊
NotificationManager notificationManager =getSystemService(NotificationManager.class);
//获取一个NotificationManager实例
notificationManager.createNotificationChannel(notificationChannel);
//通过notificationManager 创建一个 通知渠道
}

优先级 作为NotificationManager类的静态常量存在

这里列个表吧

常量名说明
IMPORTANCE_NONE通知不会出现在通知栏中,也不会触发任何声音或振动。通常用于创建一个“隐藏”的通道
IMPORTANCE_MIN通知会静默地添加到通知栏,但不会触发任何声音、振动或视觉提示。适用于不需要立即引起用户注意的通知,如后台同步完成等。
IMPORTANCE_LOW通知会在通知栏中显示,但不会触发声音或振动。适合用于不太紧急的通知,例如天气更新或社交网络上的非直接互动消息。
IMPORTANCE_DEFAULT这是默认的重要程度。通知会显示在通知栏,并且可以包含声音或振动(取决于用户的设置)。适用于大多数普通类型的通知,比如电子邮件或即时通讯消息。
IMPORTANCE_HIGH通知不仅会显示在通知栏,还会触发更强烈的声音或振动(如果设备允许)。这种级别的通知应该仅限于非常重要或紧急的情况,例如来电提醒、重要的应用内事件等。
IMPORTANCE_MAXIMPORTANCE_HIGH 类似,但强调了最高的重要性。它会尽可能多地利用所有可用的提醒方式来吸引用户的注意力,包括但不限于全屏意图(Full-screen Intents),这可以让通知覆盖当前正在运行的应用界面。

2.构建通知对象

NotificationCompat.Builder builder = new NotificationCompat.Builder(this,"1")
.setContentTitle("普通通知") // 设置 通知标题
.setContentText("这是内容") //设置通知内容
.setSmallIcon(R.drawable.musci)//设置小图片 ,这个我没找到显示在哪,但是必须设置
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.video))//设置大图片
.setAutoCancel(true);//设置单击自动取消

这样就构建了一个NotificationCompat.Builder对象;如果没用其他特殊需求 直接发送就行

3.发送通知

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(mHighNotificationId, builder.build());

直接发送就完了,这步最简单

常用Api及其使用

以上是最简单的通知,作用不过是发送了一个简单的图文通知,

1.设置优先级(setCategory())

设置该通知的优先级(跟通知渠道那个两码事) , 来自于安卓6.21

  • 目的:通过设置通知的类别,可以为通知提供更多的上下文信息,这有助于系统和其他应用程序更好地理解和处理通知。例如,当设备处于“勿扰模式”时,系统会根据通知的类别决定是否显示该通知。

​ 参数列表(来自于NotificationCompat的静态常量)

  • CATEGORY_MESSAGE :消息类型。

  • CATEGORY_CALL:来电或视频通话。

  • CATEGORY_EMAIL:电子邮件。

  • CATEGORY_ALARM:闹钟。

  • CATEGORY_REMINDER:提醒。

  • CATEGORY_PROGRESS:进度更新。

  • CATEGORY_SOCIAL:社交网络更新。

在NotificationCompat.Builder()的build()方法使用前使用setCategory( int code )

参数填上述

懒得喷

2.锁屏可见性(setVisibility())

来自于安卓6.1.2

  • 目的:此方法用来指定通知在锁屏界面上的可见程度。它决定了通知在锁屏状态下显示多少信息。

​ 参数列表(来自于NotificationCompat的静态常量)

  • VISIBILITY_PUBLIC:完全公开,所有通知内容都会在锁屏界面上显示。
  • VISIBILITY_SECRET:完全隐藏,连通知的存在都不会显示在锁屏界面上。
  • VISIBILITY_PRIVATE : 欲拒还迎,只会显示通知图标和标题,而不会显示具体的文本内容

在NotificationCompat.Builder()的build()方法使用前使用setVisibility( int code )

参数填上述

3.设置角标

这个还有点用,比如微信qq发的未读消息数量,就那个小红点

角标来自于安卓6.3.2,设置角标允许与否 来自8.0;

  1. 在notificationChannel创建还未登记时, 调用notificationChannel.setShowBadge(true); 允许角标
  2. NotificationCompat.Bulder().build()前,调用setNumber( ); 传入你要显示的数字
4.进度条

​ 形如类似应用商店的通知,比如已下载 99.999%

​ 在NotificationCompat.Bulder().build()前,调用setProgress()

int progressMax = 100; //最大值
int progressCurrent = 30; //当前值
//方法声明
public void setProgress(progressMax, progressCurrent, false); // 设置进度条

还是很方便的

更新进度条

这个更方便

刚才用剩的Buider不要扔,当需要更新进度条时,重新设置好全部值,发布,完事;

5.大文本通知

普通的通知不特地设置,只能显示一行字

在NotificationCompat.Bulder().build()前

setStyle(new NotificationCompat.BigTextStyle().bigText("你要显示的文字"))
6.大图片通知

显示一张大图片

在NotificationCompat.Bulder().build()前

setStyle(new NotificationCompat.BigPictureStyle()
.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.ic_big_pic);))
7.设置通知声音

从 Android 8.0 (API level 26) 开始,声音和震动模式应该在创建 NotificationChannel 时进行设置。

之前则是在Bulder()中

channel.setSound(Url url);//指向一个音频文件

设置为默认声音

channel.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));

设置自己想要的声音同理

8.设置通知震动

震动需要在Manifest中声明震动权限

<uses-permission android:name="android.permission.VIBRATE" />
channel.enableVibration(true); // 启用震动
channel.setVibrationPattern(new long[]{1000, 1000, 1000, 1000}); // 设置震动模式 代表播放1秒停1秒,两次

点击事件

在正式使用点击事件之前,先认识一个类

PendingIntent

PendingIntent可以看作是对Intent的一个封装,但它不是立刻执行某个行为,

而是满足某些条件或触发某些事件后才执行指定的行为。

如果学习过广播,应该知道这个类

先使用PendingIntent…getActivity()方法获取一个PendingIntent对象

Intent intent =new Intent(MainActivity.this,TwoActivity.class);
//先创建个从当前页面到第二个页面的意图对象
PendingIntent..getActivity(context,0, intent, PendingIntent.FLAG_IMMUTABLE)
/*
参数解释
@context : 上下文
@requestCode : 同动态获取那个一样,咱们瞎填就完了
@intent :意图对象
@第3参 : Flag标志,PendingIntent.FLAG_IMMUTABLE 代表这个PendingIntent创建后就不可变
PendingIntent.FLAG_MUTABLE 就代表可以改
*/

这个PendingIntent的意思就是,不可变的 一个从当前页面 跳转到 第二个页面 的意图,在满足条件后就会触发

点击事件

在NotificationCompat.Bulder().build()前

.setContentIntent(pendingIntent) //意思是添加内容点击意图 整个通知的点击事件
添加按钮

在NotificationCompat.Bulder().build()前

.addAction(R.drawable.musci,"看看吧",pendingIntent)

不知道什么情况,第一个参数好像给啥都行,第二个参数作为按钮的名字,第三个就是事件

posted @ 2025-11-07 09:19  gccbuaa  阅读(23)  评论(0)    收藏  举报