Android 13這些許可權廢棄,你的應用受影響了嗎?

語言: CN / TW / HK

hi 大家好,我是 DHL。公眾號:ByteCode ,專注分享最新技術原創文章,涉及 Kotlin、Jetpack、演算法動畫、資料結構、系統原始碼、 LeetCode / 劍指 Offer / 多執行緒 / 國內外大廠演算法題等等。 * 原文: https://medium.com/androiddeve... * 譯者:程式設計師 DHL * 本文已收錄於倉庫 Technical-Article-Translation

無論是更改個人頭像、分享照片、還是在電子郵件中新增附件,選擇和分享媒體檔案是使用者最常見的操作之一。在聽取了 Android 使用者反饋之後,我們對應用程式訪問媒體檔案的方式做了一些改變。

Android 13 已被廢棄的許可權

許多使用者告訴我們,檔案和媒體許可權讓他們很困擾,因為他們不知道應用程式想要訪問哪些檔案。

在 Android 13 上廢棄了 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 許可權,用更好的檔案訪問方式代替這些廢棄的 API。

從 Android 10 開始向共享儲存中新增檔案不需要任何許可權。因此,如果你的 App 只在共享儲存中新增檔案,你可以停止在 Android 10+ 上申請任何許可權。

在之前的系統版本中 App 需要申請 READ_EXTERNAL_STORAGE 許可權訪問裝置的檔案和媒體,然後選擇自己的媒體選擇器,這為開發者增加了開發和維護成本,另外 App 依賴於通過 ACTION_GET_CONTENT 或者 ACTION_OPEN_CONTENT 的系統檔案選擇器,但是我們從開發者那裡瞭解到,它感覺沒有很好地整合到他們的 App 中。

System File Picker using ACTION_OPEN_CONTENT

圖片選擇器

在 Android 13 中,我們引入了一個新的媒體工具 Android 照片選擇器。該工具為使用者提供了一種選擇媒體檔案的方法,而不需要授予對其整個媒體庫的訪問許可權。

它提供了一個簡潔介面,展示照片和影片,按照日期排序。另外在 "Albums" 頁面,使用者可以按照螢幕截圖或下載等等分類瀏覽,通過指定一些使用者是否僅看到照片或影片,也可以設定選擇最大檔案數量,也可以根據自己的需求定製照片選擇器。簡而言之,這個照片選擇器是為私人設計的,具有乾淨和簡潔的 UI 易於實現。

我們還通過谷歌 Play 系統更新 (2022 年 5 月 1 日釋出),將照片選擇器反向移植到 Android 11 和 12 上,以將其帶給更多的 Android 使用者。

開發一個照片選擇器是一個複雜的專案,新的照片選擇器不需要團隊進行任何維護。我們已經在 ActivityX 1.6.0 版本中為它建立了一個 ActivityResultContract。如果照片選擇器在你的系統上可用,將會優先使用照片選擇器。

kotlin // Registering Photo Picker activity launcher with a max limit of 5 items val pickMultipleVisualMedia = registerForActivityResult(PickMultipleVisualMedia(5)) { uris -> // TODO: process URIs } // Launching the photo picker (photos & video included) pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageAndVideo))

如果希望新增型別進行篩選,可以採用這種方式。

kotlin // Launching the photo picker (photos only) pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.ImageOnly)) // Launching the photo picker (video only) pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.VideoOnly)) // Launching the photo picker (GIF only) pickMultipleVisualMedia.launch(PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif")))

可以呼叫 isPhotoPickerAvailable 方法來驗證在當前裝置上照片選擇器是否可用。

ACTION_GET_CONTENT 將會發生改變

正如你所見,使用新的照片選擇器只需要幾行程式碼。雖然我們希望所有的 Apps 都使用它,但在 App 中遷移可能需要一些時間。

這就是為什麼我們使用 ACTION_GET_CONTENT 將系統檔案選擇器轉換為照片選擇器,而不需要進行任何程式碼更改,從而將新的照片選擇器引入到現有的 App 中。

針對特定場景的新許可權

雖然我們強烈建議您使用新的照片選擇器,而不是訪問所有媒體檔案,但是您的 App 可能有一個場景,需要訪問所有媒體檔案(例如相簿照片備份)。對於這些特定的場景,我們將引入新的許可權,以提供對特定型別的媒體檔案的訪問,包括影象、影片或音訊。您可以在文件中閱讀更多關於它們的內容。

如果使用者之前授予你的應用程式 READ_EXTERNAL_STORAGE 許可權,系統會自動授予你的 App 訪問許可權。否則,當你的 App 請求任何新的許可權時,系統會顯示一個面向使用者的對話方塊。

所以您必須始終檢查是否仍然授予了許可權,而不是儲存它們的授予狀態。

下面的決策樹可以幫助您更好的瀏覽這些更改。

我們承諾在保護使用者隱私的同時,繼續改進照片選擇器和整體儲存開發者體驗,以建立一個安全透明的 Android 生態系統。

新的照片選擇器被反向移植到所有 Android 11 和 12 裝置,不包括 Android Go 和非 gms 裝置。


全文到這裡就結束了,感謝你的閱讀,堅持原創不易,歡迎在看、點贊、分享給身邊的小夥伴,我會持續分享原創乾貨!!!

真誠推薦你關注我,公眾號:ByteCode ,持續分享硬核原創內容,Kotlin、Jetpack、效能優化、系統原始碼、演算法及資料結構、動畫、大廠面經。



我開了一個雲同步編譯工具(SyncKit),主要用於本地寫程式碼,然後同步到遠端裝置,在遠端裝置上進行編譯,最將編譯的結果同步到本地,程式碼已經上傳到 Github,歡迎前往倉庫 hi-dhl/SyncKit 檢視。


近期必讀熱門文章

開源新專案

  • 雲同步編譯工具(SyncKit),本地寫程式碼,遠端編譯,歡迎前去檢視 SyncKit

  • KtKit 小巧而實用,用 Kotlin 語言編寫的工具庫,歡迎前去檢視 KtKit

  • AndroidX Jetpack 相關元件的實戰專案以及相關元件原理分析文章,正在逐漸增加 Jetpack 新成員,倉庫持續更新,歡迎前去檢視 AndroidX-Jetpack-Practice

  • LeetCode / 劍指 offer,包含多種解題思路、時間複雜度、空間複雜度分析,線上閱讀