設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

谷歌:12 月起,數(shù)十億臺(tái)安卓手機(jī)等支持權(quán)限自動(dòng)重置,包括 Android 6.0~11

2021/10/20 12:24:31 來源:IT之家 作者:瀟公子 責(zé)編:瀟公子

IT之家 10 月 20 日消息,谷歌 Android 開發(fā)者博客今天發(fā)文稱,為數(shù)十億臺(tái)設(shè)備提供權(quán)限自動(dòng)重置功能。

應(yīng)用通常需要請(qǐng)求某些權(quán)限才能正常運(yùn)行,但在任何給定的設(shè)備都有數(shù)十個(gè)應(yīng)用的情況下,要讓之前授予的權(quán)限保持最新狀態(tài)可能很困難,特別是在你長(zhǎng)時(shí)間未使用某個(gè)應(yīng)用時(shí)。

谷歌稱,在 Android 11 中引入了權(quán)限自動(dòng)重置功能。這項(xiàng)功能有助于保護(hù)用戶的隱私: 如果用戶幾個(gè)月未使用某應(yīng)用,該功能就會(huì)自動(dòng)重置此應(yīng)用的運(yùn)行時(shí)權(quán)限,即請(qǐng)求時(shí)向用戶顯示提示的權(quán)限。2021 年 12 月起,谷歌會(huì)將這項(xiàng)功能擴(kuò)展到數(shù)十億臺(tái)設(shè)備。該功能將自動(dòng)在運(yùn)行 Android 6.0 (API 級(jí)別 23) 或更高版本的使用 Google Play 服務(wù)的設(shè)備上啟用。

權(quán)限自動(dòng)重置功能

https://developer.android.google.cn/about/versions/11/privacy/permissions#auto-reset

運(yùn)行時(shí)權(quán)限

https://developer.android.google.cn/guide/topics/permissions/overview#runtime

Google Play 服務(wù)

https://developers.google.cn/android

系統(tǒng)將默認(rèn)為面向 Android 11 (API 級(jí)別 30) 或更高版本的應(yīng)用啟用該功能。不過,用戶可以為面向 API 級(jí)別 23 到 29 的應(yīng)用手動(dòng)啟用權(quán)限自動(dòng)重置功能。

那么,這對(duì)開發(fā)者來說意味著什么呢?

例外

一些應(yīng)用和權(quán)限將自動(dòng)免于撤消,如企業(yè)使用的活動(dòng)設(shè)備管理員應(yīng)用,以及由企業(yè)政策固定的權(quán)限。

請(qǐng)求用戶停用自動(dòng)重置

如有需要,開發(fā)者可以請(qǐng)求用戶阻止系統(tǒng)重置其應(yīng)用的權(quán)限。適用于用戶期望應(yīng)用主要在后臺(tái)運(yùn)行,甚至無需與其互動(dòng)的情況。您可以查看主要用例:

https://developer.android.google.cn/training/permissions/requesting#request-disable-auto-reset

比較當(dāng)前行為與新行為

必要的代碼更改

如果一個(gè)應(yīng)用面向 API 30 及更高版本,并請(qǐng)求用戶停用權(quán)限自動(dòng)重置,那么開發(fā)者需要做一些簡(jiǎn)單的代碼更改。如果應(yīng)用不停用自動(dòng)重置,則無需進(jìn)行代碼更改。

注: 此 API 僅適用于 targetSDK 為 API 30 或更高版本的應(yīng)用,因?yàn)閮H這些應(yīng)用具有權(quán)限自動(dòng)重置。如果應(yīng)用的 targetSDK 為 API 29 或更低版本,則開發(fā)者無需進(jìn)行任何更改。

下表匯總了新的跨平臺(tái) API (與 Android 11 中發(fā)布的 API 相比):

Android 11

https://developer.android.google.cn/training/permissions/requesting#auto-reset-permissions-unused-apps

PackageManager.isAutoRevokeWhitelisted()

https://developer.android.google.cn/reference/android/content/pm/PackageManager#isAutoRevokeWhitelisted(java.lang.String)

Intent.ACTION_AUTO_REVOKE_PERMISSIONS

https://developer.android.google.cn/reference/android/content/Intent#ACTION_AUTO_REVOKE_PERMISSIONS

這個(gè)跨平臺(tái) API 屬于 Jetpack Core 庫,將于 Jetpack Core v1.7.0 中推出,現(xiàn)已發(fā)布 Beta 版:

https://developer.android.google.cn/jetpack/androidx/releases/core

一個(gè)需要用戶禁用自動(dòng)停用自動(dòng)重置的邏輯示例:

val future: ListenableFuture<Int> =
    PackageManagerCompat.getUnusedAppRestrictionsStatus(context)
future.addListener(
  { onResult(future.get()) },
   ContextCompat.getMainExecutor(context)
)
fun onResult(RestrictionsStatus: Int) {
  when (RestrictionsStatus) {
    // Status could not be fetched. Check logs for details.
    ERROR -> { }
    // Restrictions do not ly to your  on this device.
    FEATURE_NOT_AVAILABLE -> { }
    // Restrictions have been disabled by the user for your .
    DISABLED -> { }
    // If the user doesn't start your  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(RestrictionsStatus)
  }
}
fun handleRestrictions(RestrictionsStatus: Int) {
  // If your  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)
}

IT之家獲悉,以上邏輯適用于 Android 6.0 到 Android 10,以及 Android 11 和更高版本的設(shè)備。只需使用新 API 即可,您無需再調(diào)用 Android 11 的自動(dòng)重置 API。

Android 12 中應(yīng)用休眠功能的兼容

新 API 同樣與 Android 12 (API 級(jí)別 31) 中引入的應(yīng)用休眠功能兼容。休眠是適用于未使用應(yīng)用的一種新限制。該功能不適用于 Android 12 之前的操作系統(tǒng)版本。

Android 12 (API 級(jí)別 31) 中引入的應(yīng)用休眠功能

https://developer.android.google.cn/about/versions/12/behavior-changes-all

如果權(quán)限自動(dòng)重置和應(yīng)用休眠都應(yīng)用于一個(gè)應(yīng)用,則 getUnusedAppRestrictionsStatus () API 將返回 API_31。

發(fā)布時(shí)間表

2021 年 9 月 15 日 - 跨平臺(tái)自動(dòng)重置 API 現(xiàn)已進(jìn)入測(cè)試階段 (Jetpack Core 1.7.0 Beta 版庫),所以開發(fā)者現(xiàn)在就可以開始使用這些 API。即使在不支持權(quán)限自動(dòng)重置的設(shè)備上,使用這些 API 也是安全的 (API 在這些設(shè)備上會(huì)返回 FEATURE_NOT_AVAILABLE)。

2021 年 10 月 - 跨平臺(tái)自動(dòng)重置 API 可作為穩(wěn)定的 API 使用 (Jetpack Core 1.7.0)。

2021 年 12 月 - 權(quán)限自動(dòng)重置功能將開始在由 Google Play 服務(wù)提供支持并運(yùn)行 Android 6.0 到 Android 10 之間版本的設(shè)備上逐步推廣。在這些設(shè)備上,用戶可以前往自動(dòng)重置設(shè)置頁面,針對(duì)特定應(yīng)用啟用/停用自動(dòng)重置。系統(tǒng)將在設(shè)備啟用該功能幾周后開始自動(dòng)重置未使用應(yīng)用的權(quán)限。

2022 年第 1 季度 - 權(quán)限自動(dòng)重置功能將覆蓋所有運(yùn)行 Android 6.0 到 Android 10 之間版本的設(shè)備。

廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:谷歌,安卓,權(quán)限

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知