Android13通知运行时权限

news2025/2/27 4:57:19

部分应用更新到Android13以上之后,没有横幅(在屏幕上弹出)通知了。

Android 13(API 级别 33)及更高版本支持用于从应用发送非豁免(包括前台服务 [FGS])通知的运行时权限:POST_NOTIFICATIONS。此更改有助于用户专注于最重要的通知。

强烈建议您尽快以 Android 13 或更高版本为目标平台,以利用此功能提供的额外控制能力和灵活性。如果您继续以 12L(API 级别 32)或更低版本为目标平台,您将失去在应用功能环境中请求权限的某些灵活性。

注意:应用无需请求 POST_NOTIFICATIONS 权限即可启动前台服务。但是,应用必须在启动前台服务时提供一个通知,就像在以前的 Android 版本中一样。

声明权限

如需向应用请求新的通知权限,请将应用更新为以 Android 13 为目标平台,并完成与请求其他运行时权限类似的流程,如以下几个部分所述。

需要在应用的清单文件中声明的权限会显示在以下代码段中:

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

应用功能取决于用户在权限对话框中所做的选择

在此对话框中,用户可执行以下操作:

  • 选择允许
  • 选择不允许
  • 滑开对话框,不按任何一个按钮

下面几个部分介绍了根据用户操作的不同,应用会有哪些不同的行为表现。

用户选择“允许”

如果用户选择允许选项,您的应用可以执行以下操作:

  • ​发送通知。可以使用所有通知渠道。

  • ​发送与前台服务相关的通知。这些通知会显示在抽屉式通知栏中。

用户选择“不允许”

如果用户选择不允许选项,您的应用将无法发送通知,除非该应用符合豁免条件。除了几个特定角色之外,所有通知渠道都会被屏蔽。这类似于用户在系统设置中手动关闭应用的所有通知后发生的行为。

注意:如果您的应用以 12L 或更低版本为目标平台,并且用户点按不允许(即使仅点按一次),那么系统不会再次提示用户,直到发生以下任一情况:

  • 用户卸载并重新安装您的应用。
  • 您将应用更新为以 Android 13 或更高版本为目标平台。

用户滑开对话框

如果用户滑开对话框(即他们既没有选择允许,也没有选择不允许),通知权限的状态不会变化。

对新安装的应用的影响

如果用户在搭载 Android 13 或更高版本的设备上安装您的应用,应用的通知默认处于关闭状态。在您请求新的权限且用户向您的应用授予该权限之前,您的应用都将无法发送通知。

权限对话框的显示时间取决于应用的目标 SDK 版本:

  • 如果您的应用以 Android 13 或更高版本为目标平台,应用将可以完全自行控制权限对话框的显示时间。您可以借此机会向用户说明应用需要此权限的原因,进而鼓励他们授予该权限。
  • ​如果您的应用以 12L(API 级别 32)或更低版本为目标平台,在您创建通知渠道后您的应用首次启动 activity 时,或在您的应用启动一个 activity,然后创建它的第一个通知渠道时,系统会显示该权限对话框。这通常是在应用启动时。

对现有应用更新的影响

​为了最大限度地减少与通知权限相关的中断,当用户将其设备升级到 Android 13 或更高版本后,系统会自动向所有符合条件的应用预先授予相应权限。换言之,这些应用可以继续向用户发送通知,而用户不会看到运行时权限提示。

注意:请考虑下面这种情形,即符合条件的应用安装在搭载 12L 或更低版本的旧设备上,用户在该设备上允许接收通知,但想淘汰该设备。用户现在有了搭载 Android 13 或更高版本的新设备,并通过备份和恢复功能恢复了应用。

在这种情况下,系统会将您的应用视为“现有应用”,因此系统会自动向您的应用授予相应权限,以便您的应用可以继续发送通知。

预先授予权限的资格条件

您的应用要获得自动预先授权必须满足以下条件:应用必须已具有通知渠道,并且用户未在搭载 12L 或更低版本的设备上明确停用应用的通知。

如果用户在搭载 12L 或更低版本的设备上停用了应用的通知,当设备升级到 Android 13 或更高版本后,该停用会继续有效。

豁免


此部分列出了一些不受通知权限行为变更影响的通知和应用。在 Android 13(API 级别 33)或更高版本中,如果用户拒绝授予通知权限,他们仍会在前台服务 (FGS) 任务管理器中看到与前台服务相关的通知,但在抽屉式通知栏中不会看到此类通知。

媒体会话

与媒体会话有关的通知不受此行为变更的影响。

配置为自行管理通话的应用

如果您将应用配置为自行管理通话,那么您无需 POST_NOTIFICATIONS 权限即可让应用发送使用 Notification.CallStyle 通知样式的通知。

如果您的应用执行以下每项操作,系统就会认为您的应用已将自己配置为自行管理通话:

  1. 声明 MANAGE_OWN_CALLS 权限。
  2. 实现 ConnectionService 接口。
  3. 通过调用 registerPhoneAccount() 向设备的电信服务提供商注册。

测试应用

您可以评估以下因素:当您的应用在搭载 Android 13 或更高版本的设备上首次使用时,通知权限对此应用有何影响。借助以下几组 Android 调试桥 (adb) 命令,您可以模拟最常见的用户选择和设备升级顺序,而无需重置测试设备:

  • 应用新安装在搭载 Android 13 或更高版本的设备上:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed
  • 当应用安装在搭载 Android 12L 或更低版本的设备上时,用户让通知保持启用状态,然后设备升级到 Android 13 或更高版本:

    adb shell pm grant PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed

  • 当应用安装在搭载 Android 12L 或更低版本的设备上时,用户手动停用通知,然后设备升级到 Android 13 或更高版本:

    adb shell pm revoke PACKAGE_NAME android.permission.POST_NOTIFICATIONS
    adb shell pm set-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-set
    
    adb shell pm clear-permission-flags PACKAGE_NAME \
      android.permission.POST_NOTIFICATIONS user-fixed

最佳实践

本部分将介绍几种在应用中最有效地使用新通知权限的方式。

更新应用的目标 SDK 版本

为了让应用更灵活地显示权限对话框,请将应用更新为以 Android 13 或更高版本为目标平台。

等待一段时间再显示通知权限提示

等到用户熟悉您的应用之后,再请求他们授予任何权限。

新用户可能想要探索您的应用,并切身体会每项通知请求可以带来的好处。您可以通过用户操作触发权限提示。下面列举了几个适合显示通知权限提示的时机:

  • 用户点按“提醒铃铛”按钮时。
  • 用户选择关注他人的社交媒体帐号时。
  • 用户提交外卖订单时。

图 1 显示了请求通知权限的建议工作流程。除非 shouldShowRequestPermissionRationale() 返回 true,否则您的应用无需显示中间屏幕,即标题为“接收通知!”的屏幕。或者,您可以设置一个请求,在用户有机会熟悉您的应用后显示该屏幕。例如,您可以等到用户第三次或第四次启动应用时再显示。

图 1. 关于请求通知权限的建议用户驱动工作流程。仅当 shouldShowRequestPermissionRationale() 返回 true 时,才有必要显示中间屏幕

在上下文中请求权限

在应用内请求通知权限时,请在正确的上下文中请求,以便用户明确了解通知的用途以及应该选择接收通知的原因。例如,电子邮件应用可能包含为每封新邮件发送通知的选项,或仅为用户是唯一收件人的邮件发送通知的选项。

借此机会明确向用户表明您的意图,有助于鼓励用户向您的应用授予通知权限。

检查您的应用能否发送通知

用户必须为您的应用启用通知,您的应用才能发送通知。要确认用户是否已启用通知,请调用 areNotificationsEnabled()。

以负责任的方式使用权限

获得发送通知的许可后,请以负责任的方式使用该权限。用户可以查看您的应用每天发送的通知数量,并且可以随时撤消该权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

死锁(5.1)

死锁 1 死锁的基本概念 1.1 死锁的定义 死锁是发生在一组相互合作或竞争的线程或进程中的一个问题。因此可以定义为&#xff1a;一组竞争系统资源或相互通信的进程相互的“永久”阻塞。若无外力作用&#xff0c;这组进程将永远不能继续执行。 1.2死锁产生的原因进程 &…

第四章 统计机器学习

机器学习&#xff1a;从数据中学习知识&#xff1b; 原始数据中提取特征&#xff1b;学习映射函数f&#xff1b;通过映射函数f将原始数据映射到语义空间&#xff0c;即寻找数据和任务目标之间的关系&#xff1b; 机器学习&#xff1a; 监督学习&#xff1a;数据有标签&#x…

基于Java实现的商品出入库管理系统

基于Java实现的商品出入库管理系统&#xff08;文末附源码&#xff09; 前言 一、出入库管理系统含义介绍&#xff1a; 出入库管理系统是一套利用一物一码技术对仓库货物各环节实施全过程控制管理的系统&#xff0c;可对仓库货物进行入库、出库、货位、批次、保质期等实现一…

DDL 数据定义语言

DDL 数据定义语言 目录概述一、库的管理1、库的创建2、库的修改【一般不修改&#xff0c;容易出现错误】3、库的删除二、表的管理【重要】1、表的创建2、表的修改3、表的删除4、表的复制 【可以跨库复制】练习题概述 数据定义语言 库和表的管理 一、库的管理 创建、修改、删除…

分享116个HTML电子商务模板,总有一款适合您

分享116个HTML电子商务模板&#xff0c;总有一款适合您 116个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/1gaff8RsoYUD_ep0ejhGkMw?pwdzby2 提取码&#xff1a;zby2 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 建筑行业电子商务模板 建…

2.1单区域集成IS-IS

2.2.1 实验一:单区域集成IS-IS 实验目的实现IS-IS协议基本配置实验拓扑配置单区域集成IS-IS的拓扑图如图2-4所示: 图2-4:配置单区域集成IS-IS 实验步骤配置IP地址R1的配置 <Huawei>system-view

MySQL必会四大函数-窗口函数

在了解窗口函数之前&#xff0c;我们必须了解聚合函数。常见的聚合函数&#xff0c;包括 AVG、COUNT、MAX、MIN、SUM 以及 GROUP_CONCAT&#xff0c;常和GROUP BY 函数一起使用。聚合函数的作用就是对一组数据行进行汇总计算&#xff0c;并且返回单个分析结果。 窗口函数和聚合…

用最新版 VoxEdit 来提升你们的创造力!

众所周知&#xff0c;VoxEdit 可以为你们提供 Voxel 资产建模、装配和制作动画并与全世界分享的一站式服务&#xff0c;而这些全都是免费的。我们一直倾听社区意见并希望让所有人都能更容易进入 The Sandbox 元宇宙。VoxEdit 最新更新版本已经推出&#xff01;为了软体更本土化…

MySQL的触发器

目录 一.概述 介绍 触发器的特性 操作—创建触发器 操作—new和old 操作—查看触发器 操作—删除触发器 注意事项 一.概述 介绍 触发器&#xff0c;就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段&#xff0c;但是…

MACD红二波选股公式,选出MACD二次翻红的标的

经过一段上涨行情之后&#xff0c;市场出现了时间稍长或者幅度稍大的调整&#xff0c;MACD指标的DIF、DEA会出现死叉&#xff0c;柱线由红色转变为绿色。 而调整时间较短或者幅度较小&#xff0c;MACD红柱会缩短&#xff0c;但不出现绿柱&#xff0c;之后红柱开始变长&#xff…

Python-第六天 Python数据容器

Python-第六天 Python数据容器一、数据容器入门1.数据容器二、数据容器&#xff1a;list(列表)1.列表的定义2.列表的下标&#xff08;索引&#xff09;3.列表的常用操作&#xff08;方法&#xff09;4.练习案例:常用功能练习5.list&#xff08;列表&#xff09;的遍历5.1 列表的…

RabbitMQ 入门到应用 ( 三 ) 交换机分类

4.交换机 Exchange 分类 4.0.创建队列Queue 在 操作界面 分别 添加 fivemall.goods fivemall.order fivemall.admin yuan.admin 四个队列 4.1.Direct Exchange(直接交换机) 该类型的交换器将所有发送到该交换器的消息被转发到RoutingKey指定的队列中&#xff0c;也就是说路由…

JavaScript JSON

文章目录JavaScript JSON什么是 JSON?JSON 实例JSON 格式化后为 JavaScript 对象JSON 语法规则JSON 数据 - 一个名称对应一个值JSON 对象JSON 数组JSON 数组JSON 字符串转换为 JavaScript 对象相关函数JavaScript JSON JSON 是用于存储和传输数据的格式。 JSON 通常用于服务端…

简单实用的CSS属性(滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、)

简单实用的CSS属性&#xff08;滑轮滚动保持头部不动、暂无数据显示、元素隔开距离、带背景的文字效果、网页上禁止选中文字、校验值有效为绿色无效为红色、&#xff09; 目录 一、滑轮滚动保持头部不动 二、暂无数据显示 三、元素隔开距离 四、带背景的文字效果 backgro…

9个相见恨晚的提升办公效率的网站!

推荐9个完全免费的神器网站&#xff0c;每一个都是功能强大&#xff0c;完全免费&#xff0c;良心好用&#xff0c;让你相见恨晚。 1&#xff1a;知犀思维导图 https://www.zhixi.com/ 知犀思维导图是一个完全免费的宝藏在线思维导图工具。它完全免费&#xff0c;界面简洁唯美…

二【单表的增删改查】(只演示增 )

目录1.1 前述1.2 结果映射resultMap1.2.1 字段名和属性名不匹配情况1.2.2 解决方法1.3 使用Insert 方法添加数据&#xff08;涉及主键 问题&#xff09;1.1 前述 MyBatis可以方便的对数据库进行操作&#xff0c;而数据库表可能是一个相对独立的表&#xff08;这里谓之单表&…

2023年1月手机热门品牌型号排行榜(手机行业趋势分析)

近期苹果降价引起人们的关注&#xff0c;并且优惠较大&#xff0c;iPhone 14 Pro系列在苹果官方授权渠道均降价&#xff0c;线下授权门店普遍降价700元左右。iPhone Pro与Pro Max作为苹果的旗舰产品&#xff0c;通常被认为是更为保值的机型&#xff0c;一般来说&#xff0c;不会…

分布式数据库(DorisDB、Clickhouse、TiDB)调研

1. 性能功能特点 B站视频&#xff1a;DorisDB VS ClickHouse OLAP PK 1.1 DorisDB 场量&#xff1a;线上数据应用 访问官方网站DorisDB企业版文档 DorisDB是鼎石科技由Apache Doris核心研发团队打造的新一代企业级MPP数据库。它继承了Apache Doris项目十多年研发成果&…

vr汽修仿真实训教学整体方案软件专业定制

随着网络、多媒体、人机交互等技术的发展,传统的教学模式受到越来越大的挑战.其中,汽车专业教学矛盾较为突出。 传统的汽车专业教学通常采用以PPT、视频、音频等传统视听教学系统的理论教学和实训车间实际操作的实训教学.这种教学模式不仅不能引起学生的学习兴趣,同时需要大量实…

MybatisPlus使用聚合函数

前言 今天遇到了一个求总数返回的情况&#xff0c;我一想这不是用sum就完事了吗。 但是仔细想想&#xff0c;MybatisPlus好像没有直接使用sum的api。 虽然没有直接提供&#xff0c;但是办法还是有的&#xff0c;下面就分享下如何实现的&#xff1a; 首先如果使用sql是这么写…