速学Android 16新功能:带有进度的通知类型

前言

在当前已公布的Android 16版本中新增了一系列的功能特性和API,如:

  • 动态壁纸的内容处理,提供新的 content API
  • 预测性返回更新,添加了finishAndRemoveTaskCallback()moveTaskToBackCallback等API
  • 健康数据共享更新,添加了ACTIVITY_INTENSITY新数据类型
  • 在 ApplicationStartInfo 中启动组件,添加了 getStartComponent(),用于区分触发启动的组件类型
  • 引入了以进度为中心的Notification.ProgressStyle类型通知,帮助用户顺畅地跟踪用户发起的端到端历程
  • ...

本次我们主要来看Notification.ProgressStyle这种新类型的通知。

什么是有进度的通知?

先来看一张官方的图片。

此时你可能冷嘲热讽:这不就是下载进度的样式吗?不早就有了吗?使用builder.setProgress两秒钟搞定。

不,builder.setProgress 只能设置一个数值,而Notification.ProgressStyle是通知中心新增的全新类型,功能也更加丰富。

我们可以用在共享车辆、导航、快递距离以及 任务完成度等场景中,而之前如果想实现这种功能就只能通过自定义通知的View来解决。

通知模板

Notification.ProgressStyle通知类型模板如下图所示:

各参数含义如下图所示:

参数 定义
A 背景图标。一般为App图标
B 头部标题,一般为App名称
C 通知时间,一般为系统生成
D 通知标题
E 通知内容
F 进度条
G 操作按钮

我们还可以给进度条设置一个图标,如导航按钮或者小汽车图标,如下图所示:

代码实践

比如,我们现在创建一个带有进度的通知样式,代码如下所示:

less 复制代码
var progressStyle = if (Build.VERSION.SDK_INT >= 36) {
    Notification.ProgressStyle().setStyledByProgress(false).setProgress(456)
        .setProgressTrackerIcon(Icon.createWithResource(context, R.mipmap.care))
        .setProgressSegments(
            listOf(
                Notification.ProgressStyle.Segment(41).setColor(Color.BLACK),
                Notification.ProgressStyle.Segment(552).setColor(Color.YELLOW),
                Notification.ProgressStyle.Segment(253).setColor(Color.WHITE),
                Notification.ProgressStyle.Segment(94).setColor(Color.BLUE)
            )
        ).setProgressPoints(
            listOf(
                Notification.ProgressStyle.Point(60).setColor(Color.RED),
                Notification.ProgressStyle.Point(560).setColor(Color.GREEN)
            )
        )

然后,我们使用这个progressStyle构建一个通知并发送。

scss 复制代码
progressStyle?.let {
val builder: Notification.Builder =
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Notification.Builder(context, "chat1")
                .setSmallIcon(android.R.drawable.ic_dialog_info)
                .setContentTitle("阿黄哥送外卖")
                .setContentText("您的外卖正在配送中")
                .setPriority(Notification.PRIORITY_DEFAULT)
        } else {
            TODO("VERSION.SDK_INT < O")
        }
    it.setBuilder(builder)
    notificationManager?.notify(3, it.build());
} 

运行程序,效果如下图所示。

setProgressPoints用于构建线路中的点,如蓝色和红色的方块,setProgressSegments用于构建线路中的路线。

setProgress用于设置当前位置,当前位置会计算在点和路线的总距离内。如我们仅设置线路路线长度为500,当前位置为250,则图标会在中间位置。

代码如下所示:

less 复制代码
Notification.ProgressStyle().setStyledByProgress(false) .setProgress( 250 )
    .setProgressTrackerIcon(Icon.createWithResource(context, R.mipmap.care))
    .setProgressSegments(
        listOf(
            Notification.ProgressStyle.Segment( 250 ).setColor(Color. GREEN ),
Notification.ProgressStyle.Segment( 250 ).setColor(Color. DKGRAY )
        )
    )

运行程序如下图所示:

最后

有了这个功能,我们可以将导航以及自身的位置实时显示在通知栏中,并且可以通过设置不同的颜色来标记路程的拥堵情况。相信后续地图、外卖软件等会优先使用这个新功能。

而对Android开发者来说,这一重大更新让我们距离送外卖又近了一步!

相关推荐
cmdch201717 小时前
手持机安卓新增推送按钮功能
android
攻城狮201517 小时前
【rk3528/rk3518 android14 kernel-6.10 emcp sdk】
android
何妨呀~17 小时前
mysql 8服务器实验
android·mysql·adb
QuantumLeap丶18 小时前
《Flutter全栈开发实战指南:从零到高级》- 25 -性能优化
android·flutter·ios
木易 士心20 小时前
MVC、MVP 与 MVVM:Android 架构演进之路
android·架构·mvc
百锦再20 小时前
国产数据库的平替亮点——关系型数据库架构适配
android·java·前端·数据库·sql·算法·数据库架构
走在路上的菜鸟20 小时前
Android学Dart学习笔记第十三节 注解
android·笔记·学习·flutter
介一安全20 小时前
【Frida Android】实战篇15:Frida检测与绕过——基于/proc/self/maps的攻防实战
android·网络安全·逆向·安全性测试·frida
hhy_smile20 小时前
Android 与 java 设计笔记
android·java·笔记
laocooon52385788621 小时前
C#二次开发中简单块的定义与应用
android·数据库·c#