Android 10系統開始 進一步增強了平臺功能,為外部存儲設備上的應用和用戶數據提供了更好的保護。作為這項工作的一部分,平臺引入了進一步的改進,以簡化向分區存儲的轉換。
為了讓用戶更好地控制自己的文件,保護用戶隱私數據,并限制文件混亂情況,Android 11在分區存儲基礎上限制了應用訪問其他應用的文件。
簡言之:分區存儲,不允許內存隨意刪除,只允許刪除app以內的文件
具體的問題描述:適配Android10+設備注意事項 - DCloud問答
那如何實現存儲圖片以及刪除圖片呢:
1、存儲圖片
//預覽時抓圖并保存成圖片文件---this.$refs.HCNet.NET_DVR_CapturePictureBlock為獲取圖片的方法,可根據實際情況替換NET_DVR_CapturePictureBlock() {// const filePath = plus.io.convertLocalFileSystemURL(`_doc/${fileName}`);var imagePath = plus.io.convertLocalFileSystemURL("_doc/" + new Date().getTime() + ".png")console.log('圖片的存儲路徑---------------', imagePath)var dic = {"lRealHandle": this.lRealHandle,"imagePath": imagePath}this.$refs.HCNet.NET_DVR_CapturePictureBlock(dic, (res) => {// console.log("預覽時抓圖并保存成圖片文件:" + JSON.stringify(res))uni.saveImageToPhotosAlbum({filePath: imagePath})})},
2、刪除圖片:
//此處根據圖片名稱進行了圖片篩選刪除,可根據實際情況修改
readFile(historyData) {const folderPath = '_doc/';let startTime = new Date(historyData.taskStartTime).getTime(); // 起始時間戳let endTime = new Date(historyData.taskEndTime).getTime(); // 結束時間戳let aFileList = [];let list = []// that = thisplus.io.resolveLocalFileSystemURL(folderPath, //指定的目錄(entry) => {var directoryReader = entry.createReader(); //獲取讀取目錄對象directoryReader.readEntries((entries) => { //返回的是指定文件夾下的文件列表aFileList = entriesaFileList.forEach(i => {if (/\./.test(i.name)) {let filenameA = i.namelet dotIndex = filenameA.lastIndexOf('.'); // 獲取最后一個點的索引let itemName = filenameA.slice(0, dotIndex);if (itemName >= startTime && itemName <= endTime) {this.delFile(i.name)}}})},(err) => {console.log("訪問目錄失敗", err);});},(err) => {console.log("訪問指定目錄失敗:" + err.message);});},delFile(fileName) {return new Promise((resolve, reject) => {let filePath = `_doc/${fileName}`plus.io.resolveLocalFileSystemURL(filePath, (entry) => {entry.remove(() => {// console.log('文件刪除成功');resolve(); // 返回成功狀態}, (error) => {console.error(`刪除失敗: ${error.code} - ${error.message}`);reject(error);});}, (error) => {console.error(`文件查找失敗: ${error.code} - ${error.message}`);reject(error);});});},
另外,圖片保存到本地,我實際在平板上看到的是白屏的圖片,如果使用圖片預覽,就可以預覽清楚了,預覽代碼:
function previewImage() {const imagePath = '/storage/emulated/0/Android/data/uni.UNICDD06A7/apps/__UNI__CDD06A7/doc/1752030774848.png';uni.previewImage({current: imagePath, // 當前顯示圖片的鏈接urls: [imagePath] // 預覽圖片的數組,可以包含多張圖片});
}// 調用預覽圖片函數
previewImage();
?