详细介绍:Android 开发基础-- 通知
通知
这个是作为自己的笔记来写的
参考资料
Android通知Notification使用全解析,看这篇就够了_android notification-CSDN博客//这个是kotlin的,用ai转成java
Android 通知栏Notification深度全面解析_android statusbarnotification解析-CSDN博客
理论部分
谷歌在安卓8.0以上 推出了通知渠道分类,可以根据通知渠道 禁用接收 某个app 的相关通知
渠道名是开发者指定的,不同渠道的通知可以具有不同的优先级
在安卓8.0以下 , 所有通知一视同仁,没有渠道分类
关键类
NotificationManager通知管理器,用来发起、更新、删除通知NotificationChannel通知渠道,8.0及以上配置渠道以及优先级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_MAX | 与 IMPORTANCE_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;
- 在notificationChannel创建还未登记时, 调用notificationChannel.setShowBadge(true); 允许角标
- 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)
不知道什么情况,第一个参数好像给啥都行,第二个参数作为按钮的名字,第三个就是事件

浙公网安备 33010602011771号