Android 11對應的API為30,從這個版本起要想對外部存儲進行寫入操作的話需要比以往的操作多幾個步驟,這里簡單歸納下,具體的原因我就不多話了,具體步驟如下以供參考
1-在AndroidManifest.xml里這樣注冊權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
比以往多一條MANAGE_EXTERNAL_STORAGE
2-在AndroidManifest.xml的application下加入android:requestLegacyExternalStorage="true"
其實這句在API30下已經不起作用了,但在API29中還有作用,所以一并加上以免麻煩。
3-在代碼中申請權限,由于這些新加的權限特殊,以往的申請方式不起作用,無論怎么申請,最后必然是授權失敗。所以正確的方式就是先判斷API的版本,如果大于等于30則用Environment.isExternalStorageManager()判斷是否有授權,這個方法會返回一個布爾值,如是false就跳到一個特殊的頁面讓用戶手動授權,跳轉方法如下:
val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
intent.data = Uri.parse("package:" + requireActivity().packageName)
startActivity(intent) //startActivityForResult(intent,0x01)
由于這個授權界面是一個Activity,所以用startActivity還是startActivityForResult都可以,具體看你怎么利用生命周期了。
4-記得用傳統方式申請下WRITE_EXTERNAL_STORAGE,以免產生不必要的麻煩。
到此,針對Android 11的外部存儲的權限申請就這樣了。最后說一下,雖然通過上述方式可以對整個外部存儲空間進行文件的讀寫操作,但Android/data目錄是個例外,此目錄下保存著所有應用的專屬空間,在Android11下已經不讓訪問了,但可以通過代碼方式直接訪問自己的那個目錄。
-
Android
+關注
關注
12文章
3945瀏覽量
127945 -
存儲
+關注
關注
13文章
4355瀏覽量
86177 -
API
+關注
關注
2文章
1511瀏覽量
62401
發布評論請先 登錄
相關推薦
![](https://file1.elecfans.com/web2/M00/86/4A/wKgaomRmVUqAXJvPAAAQqx1aEbI282.png)
HarmonyOS開發權限申請的方法
在Android 11中OTA工具讀寫的文件夾不具有訪問權限,不能升級是為什么?
如何使用權限的Android進行應用風險評估方法的資料說明
![如何使用<b class='flag-5'>權限</b>的<b class='flag-5'>Android</b>進行應用風險評估方法的資料說明](https://file.elecfans.com/web1/M00/8C/F8/pIYBAFycji-AR1apAAA70CUSn60009.png)
如何使用Android的權限實現應用風險評估詳細方法說明
![如何使用<b class='flag-5'>Android</b>的<b class='flag-5'>權限</b>實現應用風險評估詳細方法說明](https://file.elecfans.com/web1/M00/AB/12/o4YBAF2yuiCABK0_AABKwDEKM7o579.png)
基于權限的Android應用風險評估方法
![基于<b class='flag-5'>權限</b>的<b class='flag-5'>Android</b>應用風險評估方法](https://file.elecfans.com/web1/M00/C1/74/pIYBAF8RXf-ANbLvAAFN0eNyZG0666.png)
鴻蒙APP開發鴻蒙權限請求框架
Purple Pi OH Android11 ROOT方法
![Purple Pi OH <b class='flag-5'>Android11</b> ROOT方法](https://file1.elecfans.com/web2/M00/8A/8D/wKgaomSXnc-AUp3pAABB_ZI1EXA151.png)
Purple Pi OH Android11 ROOT方法
![Purple Pi OH <b class='flag-5'>Android11</b> ROOT方法](https://file.elecfans.com/web2/M00/AE/8A/poYBAGSefRmAE78BAATGkVe0sMQ177.png)
評論