【Android】最新版Android13使用Notification,Notification的基本使用和进阶使用

这篇具有很好参考价值的文章主要介绍了【Android】最新版Android13使用Notification,Notification的基本使用和进阶使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、使用Notification

1、创建一个通知

1.1 注册一个渠道

在Android13,版本通知的使用发生了新的变化。

1.1.1 NotificationManager原生类

首先我们需要创建一个NotificationManager用于管理通知。NotificationManager 仅支持在 API 等级 11(Android 3.0)及以上的设备上使用,因此在较旧的 Android 版本上无法使用较新的通知功能。

//创建notificationManager对通知进行管理
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
`1.1.2 NotificationManagerCompat兼容类

NotificationManagerCompat 是 Android Support Library(现在是 AndroidX 库)中提供的通知管理兼容类。它用于支持在各个 API 等级的设备上管理通知,并提供了一致的通知管理接口,无需手动进行版本适配。

  NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);

这两种方式任意选择一种即可。

接下来需要注册一个渠道(channel),通知渠道是一种对通知进行分类和管理的机制。

// 在 MainActivity 或其他合适的地方创建通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    String channelId = "001";   //通知渠道的标识符
    CharSequence channelName = "QQ";    //通知渠道的位置
    String channelDescription = "来自QQ好友的消息";    //通知渠道的描述

    //设置通知渠道的级别
    int importance = NotificationManager.IMPORTANCE_DEFAULT;

    //创建通知渠道
    NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, importance);
    notificationChannel.setDescription(channelDescription);//可以省略
   

    //在系统中注册消息
    notificationManager.createNotificationChannel(notificationChannel);

}

通过 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 条件判断,确保当前设备运行的 Android 版本是 8.0 或更高版本。只有在这种情况下,通知渠道才会被创建。

然后,定义了三个变量和设置了一个渠道级别用于设置通知渠道的属性:

参数 说明
channelId 通知渠道的ID,用户不可见,实例化Notification的时候需要用到。
channelName 通知渠道的名称,这个是方便用户管理通知用的,用户可见
channelDescription 通知渠道的描述。用于在系统设置界面和通知管理中向用户显示通知渠道的详细描述。
importance 渠道优先级

渠道的优先级有三种:

  1. IMPORTANCE_DEFAULT:(默认级别)
  2. IMPORTANCE_HIGH:(高)
  3. IMPORTANCE_LOW:(低)
  4. IMPORTANCE_MAX:最重要的通知,系统会立马使得消息显示在屏幕

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

接下来通过NotificationChannel创建一个渠道,构造方法的三个参数分别是:Id、name、importance。

通过setDescription() 方法设置渠道的表述消息

最后在系统中注册消息即可:

notificationManager.createNotificationChannel(notificationChannel);

1.2、扩充知识CharSequence

使用 CharSequence 类型的好处在于它是一个通用接口,它可以包含不同类型的字符序列,包括不可变的字符串 String 和可变的字符串 StringBuilderStringBuffer 等。这样,我们在定义通知渠道时,可以使用 CharSequence 类型的变量,允许传递不同类型的字符序列。

1.3 创建通知

注意Android 8以上都需要获取权限

//申请通知权限
if (ContextCompat.checkSelfPermission(MainActivity.this,
                                      Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);
}

还需要在AndroidManifest中进行注册:

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

接下来才进行创建通知:

//创建通知
Notification notification = new NotificationCompat.Builder(MainActivity.this, "001")
    .setContentTitle("QQ消息")    //消息的标题
    .setContentText("你好,我是张三")  //消息的内容
    .setWhen(System.currentTimeMillis())    //指定通知被创建的时间
    .setSmallIcon(R.drawable.notify)    //通知的小图标
    .setLargeIcon(BitmapFactory.decodeResource
                  (getResources(), R.drawable.notify)) //通知的大图标
    .build();

//显示一个通知
notificationManager.notify(1, notification);

setLargeIcon() 方法中,需要传递一个 Bitmap 对象作为大图标的内容。这里使用了 BitmapFactory.decodeResource(getResources(), R.drawable.notify) 来将 R.drawable.notify 资源转换成 Bitmap 对象,并将其作为大图标设置给通知。

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

1.4 为消息设置点击事件

//点击通知后跳转页面
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_IMMUTABLE);

使用PendingIntent,他有四个参数:

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

  1. 第二个参数一般不会使用,通常传入0
  2. 第三个参数是Intent对象
  3. 第四个参数是一个标志(flag),用于确定意图的行为

有四个值可选通常是FLAG_IMMUTABLE

  • PendingIntent.FLAG_IMMUTABLE: 这是 Android 12(API 级别 31)及更高版本中引入的标志。创建的 PendingIntent 对象将变为不可变。不可变的 PendingIntent 在创建后就无法修改其内容、标志或其他属性,提高了安全性和性能。

  • PendingIntent.FLAG_UPDATE_CURRENT: 用于指定如果创建的 PendingIntent 已经存在,那么使用现有的 PendingIntent,并更新其中的 Intent 内容为新传入的 Intent。如果不存在,就创建一个新的 PendingIntent这个标志通常用于在多次创建相同 PendingIntent 的场景,确保只有一个 PendingIntent 实例,并且其中的 Intent 内容保持最新。

  • PendingIntent.FLAG_CANCEL_CURRENT:如果创建的 PendingIntent 已经存在,那么将现有的 PendingIntent 取消掉,然后创建一个新的 PendingIntent。即先取消已存在的 PendingIntent,再创建新的。

  • PendingIntent.FLAG_NO_CREATE:如果创建的 PendingIntent 已经存在,不会再创建新的 PendingIntent,而是返回已存在的 PendingIntent。如果不存在,返回 null这个标志通常用于查询是否已经存在特定的 PendingIntent,而不会真正创建新的实例

最后使用在创建通知时加上:

.setContentIntent(pi)   //点击后的跳转事件

然后点击这个通知就可以实现跳转了。

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

通过这个动图,我们发现点击通知后通知依然没有消失,这是为什么?

解决方法有两种:

  1. 一种是在NotificationCompat.Builder中再连缀一个**setAutoCancel()**方法

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

  1. 另一种是显式的调用NotificationManager中的**cancel()**方法。

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

这个1就是我们在创建通知时,为这个通知设置的id

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java

2、通知的进阶用法

android 13都需要在渠道中注册

2.1 设置震动

//注册震动
long[] vibrationPattern = {100, 200, 300, 400}; // 设置震动模式,参数为一个 long 类型数组,表示震动的时长和间隔
// 配置通知出现时的震动(如果 Android 设备支持的话)
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(vibrationPattern);

notificationChannel.setVibrationPattern(vibrationPattern);这段代码也可以不在渠道中设置,只需要使用notificationChannel.enableVibration(true);注册。

然后在通知NotificationCompat.Builder中:

.setVibrate(new long[]{100, 200, 300, 400})

注意设置权限;

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

2.2 设置闪烁灯

// 设置通知渠道的闪灯效果
notificationChannel.enableLights(true); // 允许通知闪灯

然后在通知NotificationCompat.Builder中:

.setLights(Color.RED,1000,2000)

第一个参数是颜色,第二个是亮灯时长,第三个是暗灯时长

2.3 设置声音

.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Big_Easy.ogg")))

2.4 创建富文本通知内容

.setStyle(new NotificationCompat.BigTextStyle().bigText("ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"))

notificationmanagercompat和notificationmanager,Android,android,Notification,开发语言,java文章来源地址https://www.toymoban.com/news/detail-798104.html

2.5 显示大图

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.notify)))

到了这里,关于【Android】最新版Android13使用Notification,Notification的基本使用和进阶使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 最新版Android studio没有layout文件解决方案

    在 最新版的 Android studio中,创建一个空的活动发生了变化,旧版中可以直接选择empty activity,如  但在新版,empty activity的图标发生了变化 而在最新版的empty activity上我们创建项目后是没有layout文件的,下面的empty views activity才和旧版的empty activity相同。 这表明官方推荐使用C

    2024年02月04日
    浏览(38)
  • 2023最新版Android逆向教程——第1天:Android Studio的安装与配置

    通常情况下,为了提高开发效率,需要使用相应的开发工具。在 Android 发布初期,推荐使用的开发工具是 Eclipse,随着 2015 年 Android Studio 正式版推出,标志着 Google 公司推荐的 Android 开发工具已从 Eclipse 更改为 Android Studio。而且在 Android 的官方网站中,也提供了集成 Android 开

    2024年02月07日
    浏览(35)
  • 小白配置java环境与Android Studio目前最新版下载安装

    Android Studio 是用于开发 Android 应用的官方集成开发环境 (IDE)。Android Studio 基于 IntelliJ IDEA 强大的代码编辑器和开发者工具,还提供更多可提高 Android 应用构建效率的功能,例如: 基于 Gradle 的灵活构建系统 快速且功能丰富的模拟器 统一的环境(供您开发适用于所有 Android

    2024年02月04日
    浏览(42)
  • Android Studio最新版:TextView字体加粗、水平居中和垂直居中

    Android Studio最新版:TextView字体加粗、水平居中和垂直居中 在Android应用程序的开发过程中,我们经常需要对界面上的文本进行样式设置,其中包括字体加粗以及水平居中和垂直居中显示。本文将介绍如何使用最新版的Android Studio实现这些效果,并提供相应的源代码作为参考。

    2024年01月23日
    浏览(39)
  • uniapp 移动端app判断用户app版本是否是最新版(Android)

    1.在uniapp项目中的App.vue文件下 2. 具体实现代码 ios的话自行给提示 去应用商店下载

    2024年01月20日
    浏览(42)
  • 【2023年最新版】AndroidKiller使用教程

    目录 一、AndroidKiller简介 二、AndroidKiller安装 三、AndroidKiller使用 四、问题汇总: 1、AndroidKiller反编译apk,再次打包安装报错:Failure [INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2] 2、反编译的过程,遇到这个报错:APK 反编译失败,无法继续下一步源码反编译! ​编辑

    2024年02月08日
    浏览(33)
  • 最新版Typora免费使用教程心得

    Typora是一个功能强大的文本编辑器,它的主要特点是它使用Markdown语言进行编辑和排版。与其他文本编辑器不同的是,Typora的编辑界面具有非常简洁和直观的设计,使得编辑和排版变得更加容易。 在本文中,我们将深入了解Typora的各个方面,并详细介绍它的各种功能和优点。

    2024年02月13日
    浏览(31)
  • VSCode配置c/c++环境 MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0) 彻底删除vscode(包括插件及配置!)

    目录 一、简介 二、下载 1  旧版安装(8.1.0)  从 sourceforge.net 下载 2  新版安装(本次采用较新版本~~~) 从 github 下载 从 镜像站点 下载  自己编译 三、安装与配置 1. 在线安装(这里仅作参考了解) 2. 离线安装(这是本文安装的重点,也是本机安装的版本~~~)★★★ 1   下载

    2024年01月19日
    浏览(39)
  • 【2023最新版】DataGrip使用MySQL教程

    目录  一、安装MySQL 二、安装DataGrip 三、DataGrip使用MySQL 1. 新建项目 2. DataGrip连接MySQL 下载驱动文件 填写root+密码 测试 成功 3. DataGrip操作MySQL 四、MySQL常用命令 1. 登录 2. 帮助 3. 查询所有数据库         MySQL是一种开源的关系型数据库管理系统(RDBMS),它是最流行和广泛

    2024年02月09日
    浏览(52)
  • Podman安装nacos使用(默认最新版)

    一,命令熟悉 --name : 命名容器的名称. -d:表示在后台运行容器. -p:指定端口映射。如: 左边的8848是宿主机的端口,右边的8848是nacos容器内部的端口。 docker.io/nacos/nacos-server:表示根据docker.io/nacos/nacos-server镜像运行容器。 --restart=always     表示启动的时候会启动相关容器插件

    2024年02月11日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包