感覺很久沒有寫博客了,不對,的確是很久沒有寫博客了。原因我不怎么想說,玩物喪志了。后面漸漸要恢復之前的寫作節(jié)奏。今天來聊聊我最近遇到的一個問題:
Android 13版本對于storage權(quán)限的控制問題。
我們都知道,Android的每個版本更新都會伴隨著搞事,也就是所謂的谷歌精英又會勸告我們來按照他們認為高效,他們認為優(yōu)雅的方式來寫代碼,或者實現(xiàn)某些功能。所以在Android 13版本中,他們就對我們非常常用的storage權(quán)限伸出魔爪了。
我現(xiàn)在主要是開發(fā)面向海外的用戶的2C應用,所以,不像國內(nèi)一樣,對于版本的需求可以說是非常嚴苛,然后這次谷歌就下了最后通牒,說如果應用不把Target SDK Version設(shè)置成33,我們就不和你玩啦= =
然后就在Storage權(quán)限這里出問題了。Android 13版本需要將storage權(quán)限細分為
-
對圖片的訪問權(quán)限
-
對視頻的訪問權(quán)限
-
對音頻的訪問權(quán)限
但是我們項目是混編的項目,目前主要的代碼都是用Flutter代碼來實現(xiàn)了,這樣就出現(xiàn)了一些比較尷尬的問題。
場景是這樣的,在Flutter層我們希望從本地選取圖片文件,在之前的版本(Android13)中,在選取文件前我們就需要判斷本地存儲權(quán)限的獲取狀況,然后根據(jù)權(quán)限的狀態(tài)來確定進一步操作,比如說彈出權(quán)限請求框或者直接讓用戶選擇本地圖片。
但是在Android13及之后的版本中,對于Storage權(quán)限的請求分為三種(其實我就感覺是谷歌官方閑著沒事干,來宣誓一下自己的主權(quán)):
public static final String READ_MEDIA_AUDIO = "android.permission.READ_MEDIA_AUDIO"; public static final String READ_MEDIA_IMAGES = "android.permission.READ_MEDIA_IMAGES"; public static final String READ_MEDIA_VIDEO = "android.permission.READ_MEDIA_VIDEO";
這里就會產(chǎn)生一個問題,就是我們?nèi)绻褂肁ndroid13之前版本的請求權(quán)限的方式時,即直接請求WRITE_EXTERNAL_STORAGE
權(quán)限,那么系統(tǒng)就會直接返回用戶已經(jīng)拒絕了該權(quán)限,無論用戶是否曾經(jīng)拒絕過該權(quán)限。
那么問題來了,如果是你,你會怎么解決這個問題:
Flutter中star比較高的解決方案是:permission_handler。它的解決思路是在Flutter層也增加如上三種權(quán)限,在需要請求的時候進行區(qū)分,這樣的確可以,但是存在一個麻煩的地方。就是每次調(diào)用的時候都需要對平臺進行區(qū)分,這就很惡心了。
所以在這里我并不打算對Flutter層進行修改,而是在原生層進行改動,我不會貼具體的代碼,我只提供思路,因為代碼是死的,人是活的。文章來源:http://www.zghlxwxcb.cn/news/detail-732688.html
解決這個問題我們只需要在請求storage權(quán)限的時候進行當前手機Android版本的判斷,如果當前手機的版本大于Android 13,那么就同時請求上述三種權(quán)限,然后將請求結(jié)果包裝成正常的storage請求結(jié)果即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-732688.html
到了這里,關(guān)于Flutter層對于Android 13存儲權(quán)限的適配問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!