網站首頁 編程語言 正文
本文覆蓋的問題場景:
- uniapp的文件IO接口報“targetSdkVersion設置>=29后在Android10+系統設備不支持當前路徑。請更改為應用運行路徑!具體請看…”錯誤
- uni.uploadFile接口上傳圖片視頻正常,上傳pdf,doc等非媒體文件報400,但無明確錯誤原因。
- Android 10及以上,使用uni或plus讀取公共目錄文件報錯。(或Android 11及以上正常,Android 10報錯)
關于外部存儲讀寫
我們知道Android開發中關于存儲主要分兩大部分:內部存儲和外部存儲。
內部存儲是給每個應用自動授權的一個僅供此應用自身讀寫的目錄,無需申請。
外部存儲則包括了:本應用外部存儲目錄、其他應用外部存儲目錄、公共目錄媒體文件、公共目錄非媒體文件四類。
在最初的Android開發中,應用可以隨意讀取上面的四類文件。
從Android 4.4(API 19)開始,默認授予本應用外部存儲目錄訪問權限,無需申請;但如果需要訪問公共目錄的媒體文件或非媒體文件,必須申請外部存儲的讀取權限。(其他應用外部存儲目錄是申請任何權限也無法訪問的)
出于安全考慮,從Android 10開始,對外部存儲的讀取權限進行了限制,默認只能訪問:公共目錄媒體文件。
但為了方便過度,在Android 10和Android 11下,如果應用在AndroidManifest.xml注冊了android:requestLegacyExternalStorage="true"
的話,應用可以暫時停用分區存儲,繼續上面除了其他應用外部存儲目錄外的其他三類文件。(如果目標版本是Android 11+,則在Android 11+上這個屬性不生效。)
從Android 11開始,新增了【管理所有文件】(也叫:所有文件訪問權限)權限,如果應用申請了這個權限,可以訪問本應用外部存儲目錄、公共目錄媒體文件、公共目錄非媒體文件三類文件。多了一個公共目錄非媒體文件的訪問。
但這個權限授予條件比較苛刻,建議如果選擇單個文件的話,盡量使用存儲訪問框架
Uniapp中對外部存儲的訪問
主要可以參考適配Android10+設備注意事項。
uniapp中訪問文件相關的包括plus.io
和uni.getFileInfo
、uni.uploadFile
等一些API。
uniapp為了適配Android 10+,針對外部存儲的訪問,默認也是只能訪問本應用外部存儲目錄、公共目錄媒體文件。
針對Android 11+,如果應用有管理所有文件權限的話,也可以訪問公共目錄非媒體文件,就是有三類權限。
但uniapp沒有兼容android:requestLegacyExternalStorage
,所以即使添加了這個標簽,在Android 10上面,uniapp的文件API依然無法訪問公共目錄非媒體權限。
針對公共目錄非媒體文件的訪問:
版本 | 管理所有文件 | 原生APP開發 | uniapp開發 |
---|---|---|---|
Android 10 | 無 | 可讀 | 不可讀 |
Android 11 | 可申請 | 可讀 | 申請后可讀 |
Android 12 | 可申請 | 申請后可讀 | 申請后可讀 |
公共目錄非媒體文件訪問實踐
針對Android 11及以上的設備,有兩種方法:
- 申請管理所有文件權限,原生開發和uniapp都可以訪問
- 通過存儲訪問框架選擇文件,未測試
針對Android 10,也有兩種方法:
- 添加
android:requestLegacyExternalStorage
,原生開發可訪問,uniapp開發依然不可訪問。(可將對文件的操作讀取上傳等轉移到原生邏輯實現,或者可通過原生插件將文件復制到本應用外部存儲私有目錄下,uniapp即可訪問文件副本) - 通過存儲訪問框架選擇文件,未測試
注意
上面總結的內容可能部分有誤,如果發現請評論告知更新~
原文鏈接:https://blog.csdn.net/anjingshen/article/details/124823595
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-10-20 kotlin淺析when與循環的使用_Android
- 2021-11-13 Gateway網關工作原理及使用方法_其它綜合
- 2023-03-17 Docker部署Nginx并修改配置文件的兩種方式_docker
- 2021-12-07 Android證書安裝過程介紹_Android
- 2022-04-19 Install MongoDB Community Edition on Red Hat or Ce
- 2022-07-29 Golang?統計字符串中數字字母數量的實現方法_Golang
- 2022-03-27 深入理解React?State?原理_React
- 2022-08-26 如何使用pandas對超大csv文件進行快速拆分詳解_python
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支