為數(shù)十億臺設(shè)備提供權(quán)限自動重置功能

image

作者 / 軟件工程師 Peter Visontay 和 Bessie Jiang

貢獻(xiàn)者 / 軟件工程師 Inara Ramji掂器、交互設(shè)計師 Rodrigo Farell镶苞、產(chǎn)品經(jīng)理 James Kelly考婴、項目經(jīng)理 Henry Chin

大多數(shù)用戶會在智能手機上花費大量時間杏瞻。無論是工作晴叨、玩游戲涂召,還是與朋友聯(lián)系,人們總會使用應(yīng)用并將其作為數(shù)字化生活的主要途徑误澳。應(yīng)用通常需要請求某些權(quán)限才能正常運行耻矮,但在任何給定的設(shè)備都有數(shù)十個應(yīng)用的情況下,要讓之前授予的權(quán)限保持最新狀態(tài)可能很困難忆谓,特別是在您長時間未使用某個應(yīng)用時裆装。

我們在 Android 11 中引入了 權(quán)限自動重置功能。這項功能有助于保護(hù)用戶的隱私: 如果用戶幾個月未使用某應(yīng)用倡缠,該功能就會自動重置此應(yīng)用的 運行時權(quán)限哨免,即請求時向用戶顯示提示的權(quán)限。2021 年 12 月起毡琉,我們會將這項功能擴展到數(shù)十億臺設(shè)備铁瞒。該功能將自動在運行 Android 6.0 (API 級別 23) 或更高版本的使用 Google Play 服務(wù) 的設(shè)備上啟用。

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

那么丐谋,這對開發(fā)者來說意味著什么呢芍碧?

例外

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

請求用戶停用自動重置

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

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

image

必要的代碼更改

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

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

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

操作 Android 11 API(適用于 Android 11 及更高版本的設(shè)備) 新的跨平臺 API(適用于 Android 6.0 及更高版本的設(shè)備垢夹,包含 Android 11 及更高版本的設(shè)備)
檢查設(shè)備是否啟用了權(quán)限自動重置功能 檢查是否 Build.VERSION.SDK_INT >= Build.VERSION_CODES.R 調(diào)用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
檢查您的應(yīng)用是否停用自動重置 調(diào)用 PackageManager.isAutoRevokeWhitelisted() 調(diào)用 androidx.core.content.PackageManagerCompat.getUnusedAppRestrictionsStatus()
請求用戶為您的應(yīng)用停用自動重置 發(fā)送帶操作的 intent Intent.ACTION_AUTO_REVOKE_PERMISSIONS 發(fā)送利用 androidx.core.content.IntentCompat.createManageUnusedAppRestrictionsIntent() 創(chuàng)建的 intent

這個跨平臺 API 屬于 Jetpack Core 庫,將于 Jetpack Core v1.7.0 中推出颖榜,現(xiàn)已發(fā)布 Beta 版棚饵。

一個需要用戶禁用自動停用自動重置的邏輯示例:

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 和更高版本的設(shè)備掩完。只需使用新 API 即可噪漾,您無需再調(diào)用 Android 11 的自動重置 API。

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

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

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

發(fā)布時間表

  • 2021 年 9 月 15 日 - 跨平臺自動重置 API 現(xiàn)已進(jìn)入測試階段 (Jetpack Core 1.7.0 Beta 版庫),所以開發(fā)者現(xiàn)在就可以開始使用這些 API冯事。即使在不支持權(quán)限自動重置的設(shè)備上焦匈,使用這些 API 也是安全的 (API 在這些設(shè)備上會返回 FEATURE_NOT_AVAILABLE)。
  • 2021 年 10 月 - 跨平臺自動重置 API 可作為穩(wěn)定的 API 使用 (Jetpack Core 1.7.0)昵仅。
  • 2021 年 12 月 - 權(quán)限自動重置功能將開始在由 Google Play 服務(wù)提供支持并運行 Android 6.0 到 Android 10 之間版本的設(shè)備上逐步推廣缓熟。在這些設(shè)備上,用戶可以前往自動重置設(shè)置頁面摔笤,針對特定應(yīng)用啟用/停用自動重置够滑。系統(tǒng)將在設(shè)備啟用該功能幾周后開始自動重置未使用應(yīng)用的權(quán)限。
  • 2022 年第 1 季度 - 權(quán)限自動重置功能將覆蓋所有運行 Android 6.0 到 Android 10 之間版本的設(shè)備吕世。

歡迎您持續(xù)關(guān)注我們彰触,隨時獲取最新資訊。

歡迎您 點擊這里 向我們提交反饋命辖,或分享您喜歡的內(nèi)容况毅、發(fā)現(xiàn)的問題。您的反饋對我們非常重要尔艇,感謝您的支持尔许!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漓帚,隨后出現(xiàn)的幾起案子母债,更是在濱河造成了極大的恐慌,老刑警劉巖尝抖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毡们,死亡現(xiàn)場離奇詭異,居然都是意外死亡昧辽,警方通過查閱死者的電腦和手機衙熔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搅荞,“玉大人红氯,你說我怎么就攤上這事框咙。” “怎么了痢甘?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵喇嘱,是天一觀的道長。 經(jīng)常有香客問我塞栅,道長者铜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任放椰,我火速辦了婚禮作烟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘砾医。我一直安慰自己拿撩,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布如蚜。 她就那樣靜靜地躺著压恒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怖亭。 梳的紋絲不亂的頭發(fā)上涎显,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音兴猩,去河邊找鬼期吓。 笑死,一個胖子當(dāng)著我的面吹牛倾芝,可吹牛的內(nèi)容都是我干的讨勤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼晨另,長吁一口氣:“原來是場噩夢啊……” “哼潭千!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起借尿,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤刨晴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后路翻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狈癞,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年茂契,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝶桶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡掉冶,死狀恐怖真竖,靈堂內(nèi)的尸體忽然破棺而出脐雪,到底是詐尸還是另有隱情,我是刑警寧澤恢共,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布战秋,位于F島的核電站,受9級特大地震影響旁振,放射性物質(zhì)發(fā)生泄漏获询。R本人自食惡果不足惜涨岁,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一拐袜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梢薪,春花似錦蹬铺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琐馆,卻和暖如春规阀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘦麸。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工谁撼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滋饲。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓厉碟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屠缭。 傳聞我的和親對象是個殘疾皇子箍鼓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容