Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >为数十亿台设备提供权限自动重置功能

为数十亿台设备提供权限自动重置功能

作者头像
Android 开发者
发布于 2022-03-10 06:44:55
发布于 2022-03-10 06:44:55
74400
代码可运行
举报
文章被收录于专栏:Android 开发者Android 开发者
运行总次数:0
代码可运行

作者 / 软件工程师 Peter Visontay 和 Bessie Jiang

贡献者 / 软件工程师 Inara Ramji、交互设计师 Rodrigo Farell、产品经理 James Kelly、项目经理 Henry Chin

大多数用户会在智能手机上花费大量时间。无论是工作、玩游戏,还是与朋友联系,人们总会使用应用并将其作为数字化生活的主要途径。应用通常需要请求某些权限才能正常运行,但在任何给定的设备都有数十个应用的情况下,要让之前授予的权限保持最新状态可能很困难,特别是在您长时间未使用某个应用时。

我们在 Android 11 中引入了 权限自动重置功能。这项功能有助于保护用户的隐私: 如果用户几个月未使用某应用,该功能就会自动重置此应用的 运行时权限,即请求时向用户显示提示的权限。2021 年 12 月起,我们会将这项功能扩展到数十亿台设备。该功能将自动在运行 Android 6.0 (API 级别 23) 或更高版本的使用 Google Play 服务 的设备上启用。

系统将默认为面向 Android 11 (API 级别 30) 或更高版本的应用启用该功能。不过,用户可以为面向 API 级别 23 到 29 的应用手动启用权限自动重置功能。

那么,这对开发者来说意味着什么呢?

例外

一些应用和权限将自动免于撤消,如企业使用的活动设备管理员应用,以及由企业政策固定的权限。

请求用户停用自动重置

如有需要,开发者可以请求用户阻止系统重置其应用的权限。适用于用户期望应用主要在后台运行,甚至无需与其互动的情况。您可以查看 主要用例

比较当前行为与新行为

必要的代码更改

如果一个应用面向 API 30 及更高版本,并请求用户停用权限自动重置,那么开发者需要做一些简单的代码更改。如果应用不停用自动重置,则无需进行代码更改。

注: 此 API 仅适用于 targetSDK 为 API 30 或更高版本的应用,因为仅这些应用具有权限自动重置。如果应用的 targetSDK 为 API 29 或更低版本,则开发者无需进行任何更改。

下表汇总了新的跨平台 API (与 Android 11 中发布的 API 相比):

操作

Android 11 API(适用于 Android 11 及更高版本的设备)

新的跨平台 API(适用于 Android 6.0 及更高版本的设备,包含 Android 11 及更高版本的设备)

检查设备是否启用了权限自动重置功能

检查是否 Build.VERSION.SDK_INT >= Build.VERSION_CODES.R

调用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()

检查您的应用是否停用自动重置

调用 PackageManager.isAutoRevokeWhitelisted()

调用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()

请求用户为您的应用停用自动重置

发送带操作的 intent Intent.ACTION_AUTO_REVOKE_PERMISSIONS

发送利用 androidx.core.content.IntentCompat.createManageUnusedAppRestrictionsIntent() 创建的 intent

这个跨平台 API 属于 Jetpack Core 库,将于 Jetpack Core v1.7.0 中推出,现已发布 Beta 版。

一个需要用户禁用自动停用自动重置的逻辑示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val future: ListenableFuture<Int> =
    PackageManagerCompat.getUnusedAppRestrictionsStatus(context)
future.addListener(
  { onResult(future.get()) },
   ContextCompat.getMainExecutor(context)
)

fun onResult(appRestrictionsStatus: Int) {
  when (appRestrictionsStatus) {
    // Status could not be fetched. Check logs for details.
    ERROR -> { }

    // Restrictions do not apply to your app on this device.
    FEATURE_NOT_AVAILABLE -> { }
    // Restrictions have been disabled by the user for your app.
    DISABLED -> { }

    // If the user doesn't start your app for months, its permissions 
    // will be revoked and/or it will be hibernated. 
    // See the API_* constants for details.
    API_30_BACKPORT, API_30, API_31 -> 
      handleRestrictions(appRestrictionsStatus)
  }
}

fun handleRestrictions(appRestrictionsStatus: Int) {
  // If your app works primarily in the background, you can ask the user
  // to disable these restrictions. Check if you have already asked the
  // user to disable these restrictions. If not, you can show a message to 
  // the user explaining why permission auto-reset and Hibernation should be 
  // disabled. Tell them that they will now be redirected to a page where 
  // they can disable these features.

  Intent intent = IntentCompat.createManageUnusedAppRestrictionsIntent
    (context, packageName)

  // Must use startActivityForResult(), not startActivity(), even if 
  // you don't use the result code returned in onActivityResult().
  startActivityForResult(intent, REQUEST_CODE)
}

以上逻辑适用于 Android 6.0 到 Android 10,以及 Android 11 和更高版本的设备。只需使用新 API 即可,您无需再调用 Android 11 的自动重置 API。

与 Android 12 中应用休眠功能的兼容

新 API 同样与 Android 12 (API 级别 31) 中引入的应用休眠功能 兼容。休眠是适用于未使用应用的一种新限制。该功能不适用于 Android 12 之前的操作系统版本。

如果权限自动重置和应用休眠都应用于一个应用,则 getUnusedAppRestrictionsStatus() API 将返回 API_31

发布时间表

  • 2021 年 9 月 15 日 - 跨平台自动重置 API 现已进入测试阶段 (Jetpack Core 1.7.0 Beta 版库),所以开发者现在就可以开始使用这些 API。即使在不支持权限自动重置的设备上,使用这些 API 也是安全的 (API 在这些设备上会返回 FEATURE_NOT_AVAILABLE)。
  • 2021 年 10 月 - 跨平台自动重置 API 可作为稳定的 API 使用 (Jetpack Core 1.7.0)。
  • 2021 年 12 月 - 权限自动重置功能将开始在由 Google Play 服务提供支持并运行 Android 6.0 到 Android 10 之间版本的设备上逐步推广。在这些设备上,用户可以前往自动重置设置页面,针对特定应用启用/停用自动重置。系统将在设备启用该功能几周后开始自动重置未使用应用的权限。
  • 2022 年第 1 季度 - 权限自动重置功能将覆盖所有运行 Android 6.0 到 Android 10 之间版本的设备。

欢迎您持续关注我们,随时获取最新资讯。

欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/10/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【详解】Android自动挂断电话的实现
在开发Android应用时,有时会遇到需要实现自动挂断电话的需求。例如,在某些特定情况下(如用户正在使用某个重要功能时),不希望电话打断用户的操作。本文将介绍如何在Android中实现自动挂断电话的功能。
大盘鸡拌面
2025/04/21
540
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
首先 , 判定权限是否已经通过 , 如果没有通过再进行申请 ; 如果下面函数返回值为 PackageManager.PERMISSION_GRANTED , 说明权限申请通过 ; 如果返回值为 PackageManager.PERMISSION_DENIED , 说明权限没有被授予 ;
韩曙亮
2023/03/29
2.5K0
【Android 应用开发】动态权限管理示例 ( 使用原生代码实现 | 申请权限 | 判定权限申请结果 | 判定 “ 不再询问 “ 情况 )
Android 12 快速适配要点
Android 12 需要更新适配点并不多,本篇主要介绍最常见的两个需要适配的点:android:exported 和 SplashScreen 。
GSYTech
2021/12/13
1.1K0
Android 12 快速适配要点
【Google Play】声明广告权限 ( you must declare the AD_ID Permission when your app targets Android 13 )
Last July, we announced Advertising policy changes to help bolster security and privacy. We added new restrictions on identifiers used by apps that target children.
韩曙亮
2023/03/30
2.1K0
【Google Play】声明广告权限 ( you must declare the AD_ID Permission when your app targets Android 13 )
Android 11 Beta 版正式发布!以及众多面向开发者的重磅更新
今天,我们发布 Android 11 Beta 版,并为开发者们带来了众多重磅更新。这些更新包括 Kotlin 协程、Jetpack Compose 工具包的最新进展、在 Android Studio 中更快地完成构建,以及 Play Console 的全新改版。
Android 开发者
2020/06/16
1.8K0
Android 11 Beta 版正式发布!以及众多面向开发者的重磅更新
Android P 适配指南
Google自 android L (5.0) 以来就持续对安装系统进行 安全 以及 性能上的升级,此次的 android P (9.0)也不例外, 更大程度上对之前一些版本一些警告的具体落实,无论你的 Target Api 是否是 28 都将受到影响。
用户1269200
2018/10/08
3.6K0
Android P 适配指南
划重点 | Android Jetpack 三大重要更新!
Android Jetpack 集合了一系列的开发库,旨在帮助开发者更容易地创作高质量的应用,同时也更好地兼容老旧版本的 Android 系统。在正式发布 Jetpack 两年后的今天,我们已经看到大量的应用开发开始采用 Jetpack 中的开发库,这其中既包括大型开发团队的产品,也有那些刚起步的应用。而这一切仅仅是开始,因为近期我们发布了一系列新的开发库,以及过去一年我们对于现有开发库的重要更新。
音视频开发进阶
2020/07/24
1.8K0
划重点 | Android Jetpack 三大重要更新!
Jetpack中可能被你忽视的—行为组件简析
之前说过了Jetpack架构组件,作为MVVM架构必备的组件,当然是人尽皆知了。然后jetpack还有很多其他可能被你忽视的组件,这次我们就说说其中一个同样精彩模块——行为组件。 还是老样子,通过举例的方式,让你掌握基本用法,心里有个数,走遍天下都不怕。
码上积木
2020/09/27
2.2K0
笔记(24)安卓各版本特性简述
加强了软件间的关联,支持点击链接跳转到对应的App(todo:scheme调起???)
木溪bo
2023/12/10
7850
笔记(24)安卓各版本特性简述
Android 10(Q)/11(R) 分区存储适配
这些应用可能会在磁盘中存储大量文件,即使应用被卸载了还会依然存在。另外,这些应用还可能会读取其他应用的一些敏感文件数据。
字节流动
2020/08/28
2.4K0
Android 10(Q)/11(R) 分区存储适配
个推解读Android13,发布《Android13适配指南》
8月16日,谷歌宣布Android13新系统的源代码已经上传到Android开源项目(AOSP)中,Android13正式发布。自从2022年2月Android13第一个预览版上线以来,历经7个月的测试和优化,正式版本的Android13终于来了!Android13仍然聚焦个人隐私保护和安全,并提供了万物互联时代下大小屏适配、电池利用率优化等相关的技术开发能力。
个推
2022/09/05
2.5K0
个推解读Android13,发布《Android13适配指南》
全面解读系统更新,收藏下这份 Android 12 (S) 版本适配自查表
Android 12 是 2021 年 10 月发布的最新正式版本,然而很多同学表示还没有适配。针对开发者在进行版本适配过程中遇到的问题,我们建立了 GitHub · AndroidPlatformWiki[1]。我们希望站在开发者的视角,全面且深刻地解读每个 Android 版本更新,以此建立起一个体系化的 Android 系统适配手册。具体包括:
用户9995743
2022/09/26
3K0
全面解读系统更新,收藏下这份 Android 12 (S) 版本适配自查表
Android 12 首个开发者预览版到来
从手机和笔记本电脑,再到平板电脑、电视甚至汽车,Android 应用每天都在各种设备上支持着数十亿人的工作、娱乐、交流和创造。当越来越多的人开始依赖您所构建的体验,人们的期望也跟着水涨船高。我们坚信,Android 开发者们的反馈有助于我们为您的应用和所有用户构建一个更好的平台。我们已经发布了 Android 12 (下一代 Android 系统) 的第一个开发者预览版,供您测试和提交反馈。
Android 开发者
2021/03/03
7110
Android 12 首个开发者预览版到来
Android 13 适配指南
2022 的Google I/O 发布了 Android 13 beta 2 和 Android 13 Beta 1 国内厂商的设备支持列表,虽然按照惯例, Android 13 应该是年末才发布正式版,但是相信有的开发者已经收到了平台的 Android13 的适配要求,所以本篇也是结合 Oppo 的 Android 13 应用兼容性适配指导 和官方提供的一些文档内容做一个整理测试。
GSYTech
2022/05/24
5.3K1
隐私策略更新 | Android 11 应用兼容性适配
Android 11 的最终版本已正式发布!该版本延续了之前发行版本里不断改进的隐私策略,为用户提供更加完善的控制机制和透明度,并帮助应用更好地处理自身的数据。
Android 开发者
2020/10/16
1.6K0
隐私策略更新 | Android 11 应用兼容性适配
Android各版本迭代信息集合
Android在版本迭代中,总会进行很多改动,那么你熟知各版本都改动了什么内容?又要怎么适配呢?
码上积木
2020/12/15
1.2K0
Android 12 适配攻略
2022年2月11日,谷歌发布了首个 Android 13 开发者预览版。2022年7月,发布了Beta 4版本,接下来就是Final Relase版本了。是时候适配一波Android12了,为后面项目适配铺平道路。
八归少年
2022/09/28
3.3K0
Android 12 适配攻略
Android 11 应用兼容性适配,看这篇就够了
本文档基于谷歌Android 11 Developer Preview 4(DP4)版本的变更输出
全栈程序员站长
2022/09/14
13.2K0
Android 11 应用兼容性适配,看这篇就够了
Now in Android #17 —— 最新 Android 动态分享
大家好,我是秉心说。最新一期的 Now in Android 又更新啦,原文地址如下:
路遥TM
2021/08/31
1.1K0
Android Sdk版本、Support包版本及常用框架最新版本汇总
Android 支持库的最新版本是28.0.0,这是最后一个google发布的支持库版本,现在google已将所有support包下的库都迁移至androidx包下面,以后的更新都只会在androidx包中进行。具体对照表点击进入。
全栈程序员站长
2022/09/02
2.8K0
推荐阅读
相关推荐
【详解】Android自动挂断电话的实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验