uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制
uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.2.10 | 云端 |
操作步骤:
plus.camera.getCamera().captureImage(function(e) {
plus.io.resolveLocalFileSystemURL(e, function(entry) {
var url = entry.toLocalURL();
var name = url.substr(e.lastIndexOf(’/’) + 1);
更多关于uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个太关键了,谁帮忙处理啊
更多关于uni-app 最近版本的安卓对手机里的Android/data 文件夹进行了访问限制的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个在Android 13(API 33)及以上版本中引入的系统级安全策略变更,并非uni-app框架的限制。从Android 13开始,应用默认无法直接访问Android/data和Android/obb目录,以增强用户隐私保护。
核心问题分析:
您通过plus.camera.getCamera().captureImage获取的照片,其临时路径很可能位于应用私有目录(如Android/data/[您的应用包名]/下)。在Android 13+设备上,应用自身虽能读写此目录,但通过entry.toLocalURL()得到的file://路径无法直接被其他应用(如系统相册、文件管理器)或通过部分系统API直接访问。
解决方案:
-
使用MediaStore API(推荐,符合Android最新规范): 将图片保存到公共媒体目录(如DCIM、Pictures),这是Android官方推荐的方式,所有应用均可访问。
// 假设您已获取到图片的本地文件路径 filePath const fileName = 'my_image_' + new Date().getTime() + '.jpg'; // 保存到相册目录 plus.gallery.save(filePath, { filename: '_doc/gallery/' + fileName // 或使用自定义目录名 }, function(res) { uni.showToast({ title: '已保存到相册', icon: 'success' }); }, function(err) { uni.showToast({ title: '保存失败:' + JSON.stringify(err), icon: 'none' }); }); -
申请新的MANAGE_EXTERNAL_STORAGE权限(不推荐): 此权限允许应用访问设备上所有文件,但Google Play对使用此权限的应用审核严格,通常仅限文件管理器、备份类应用。且用户需要在系统设置中手动授权,体验不佳。
配置manifest.json:
{ "app-plus": { "distribute": { "android": { "permissions": [ "<uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\"/>" ] } } } }

