谷歌12月起,数十亿台安卓手机等支持权限自动重置,包括And
IT之家10月20日消息,谷歌Android开发者博客今天发文称,为数十亿台设备提供权限自动重置功能。
应用通常需要请求某些权限才能正常运行,但在任何给定的设备都有数十个应用的情况下,要让之前授予的权限保持最新状态可能很困难,特别是在你长时间未使用某个应用时。
谷歌称,在Android11中引入了权限自动重置功能。这项功能有助于保护用户的隐私:如果用户几个月未使用某应用,该功能就会自动重置此应用的运行时权限,即请求时向用户显示提示的权限。2021年12月起,谷歌会将这项功能扩展到数十亿台设备。该功能将自动在运行Android6。0(API级别23)或更高版本的使用GooglePlay服务的设备上启用。
权限自动重置功能
https:developer。android。google。cnaboutversions11privacypermissionsautoreset
运行时权限
https:developer。android。google。cnguidetopicspermissionsoverviewruntime
GooglePlay服务
https:developers。google。cnandroid
系统将默认为面向Android11(API级别30)或更高版本的应用启用该功能。不过,用户可以为面向API级别23到29的应用手动启用权限自动重置功能。
那么,这对开发者来说意味着什么呢?
例外
一些应用和权限将自动免于撤消,如企业使用的活动设备管理员应用,以及由企业政策固定的权限。
请求用户停用自动重置
如有需要,开发者可以请求用户阻止系统重置其应用的权限。适用于用户期望应用主要在后台运行,甚至无需与其互动的情况。您可以查看主要用例:
https:developer。android。google。cntrainingpermissionsrequestingrequestdisableautoreset
比较当前行为与新行为
必要的代码更改
如果一个应用面向API30及更高版本,并请求用户停用权限自动重置,那么开发者需要做一些简单的代码更改。如果应用不停用自动重置,则无需进行代码更改。
注:此API仅适用于targetSDK为API30或更高版本的应用,因为仅这些应用具有权限自动重置。如果应用的targetSDK为API29或更低版本,则开发者无需进行任何更改。
下表汇总了新的跨平台API(与Android11中发布的API相比):
Android11
https:developer。android。google。cntrainingpermissionsrequestingautoresetpermissionsunusedapps
PackageManager。isAutoRevokeWhitelisted()
https:developer。android。google。cnreferenceandroidcontentpmPackageManagerisAutoRevokeWhitelisted(java。lang。String)
Intent。ACTIONAUTOREVOKEPERMISSIONS
https:developer。android。google。cnreferenceandroidcontentIntentACTIONAUTOREVOKEPERMISSIONS
这个跨平台API属于JetpackCore库,将于JetpackCorev1。7。0中推出,现已发布Beta版:
https:developer。android。google。cnjetpackandroidxreleasescore
一个需要用户禁用自动停用自动重置的逻辑示例:valfuture:ListenableFuturelt;Intgt;PackageManagerCompat。getUnusedAppRestrictionsStatus(context)future。addListener({onResult(future。get())},ContextCompat。getMainExecutor(context))funonResult(RestrictionsStatus:Int){when(RestrictionsStatus){Statuscouldnotbefetched。Checklogsfordetails。ERRORgt;{}Restrictionsdonotlytoyouronthisdevice。FEATURENOTAVAILABLEgt;{}Restrictionshavebeendisabledbytheuserforyour。DISABLEDgt;{}Iftheuserdoesntstartyourformonths,itspermissionswillberevokedandoritwillbehibernated。SeetheAPIconstantsfordetails。API30BACKPORT,API30,API31gt;handleRestrictions(RestrictionsStatus)}}funhandleRestrictions(RestrictionsStatus:Int){Ifyourworksprimarilyinthebackground,youcanasktheusertodisabletheserestrictions。Checkifyouhavealreadyaskedtheusertodisabletheserestrictions。Ifnot,youcanshowamessagetotheuserexplainingwhypermissionautoresetandHibernationshouldbedisabled。Tellthemthattheywillnowberedirectedtoapagewheretheycandisablethesefeatures。IntentintentIntentCompat。createManageUnusedAppRestrictionsIntent(context,packageName)MustusestartActivityForResult(),notstartActivity(),evenifyoudontusetheresultcodereturnedinonActivityResult()。startActivityForResult(intent,REQUESTCODE)}
IT之家获悉,以上逻辑适用于Android6。0到Android10,以及Android11和更高版本的设备。只需使用新API即可,您无需再调用Android11的自动重置API。
与Android12中应用休眠功能的兼容
新API同样与Android12(API级别31)中引入的应用休眠功能兼容。休眠是适用于未使用应用的一种新限制。该功能不适用于Android12之前的操作系统版本。
Android12(API级别31)中引入的应用休眠功能
https:developer。android。google。cnaboutversions12behaviorchangesall
如果权限自动重置和应用休眠都应用于一个应用,则getUnusedAppRestrictionsStatus()API将返回API31。
发布时间表
2021年9月15日跨平台自动重置API现已进入测试阶段(JetpackCore1。7。0Beta版库),所以开发者现在就可以开始使用这些API。即使在不支持权限自动重置的设备上,使用这些API也是安全的(API在这些设备上会返回FEATURENOTAVAILABLE)。
2021年10月跨平台自动重置API可作为稳定的API使用(JetpackCore1。7。0)。
2021年12月权限自动重置功能将开始在由GooglePlay服务提供支持并运行Android6。0到Android10之间版本的设备上逐步推广。在这些设备上,用户可以前往自动重置设置页面,针对特定应用启用停用自动重置。系统将在设备启用该功能几周后开始自动重置未使用应用的权限。
2022年第1季度权限自动重置功能将覆盖所有运行Android6。0到Android10之间版本的设备。