uni-app uni.chooseMedia 安卓10版本 在选择图片后闪退

uni-app uni.chooseMedia 安卓10版本 在选择图片后闪退

开发环境 版本号 项目创建方式
Windows Windows 11 CLI

产品分类:uniapp/App

PC开发环境操作系统:Windows

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:HUAWEI HWBLA

页面类型:vue

vue版本:vue3

打包方式:云端

CLI版本号:4.36

示例代码:

uni.chooseMedia({  
    count: 1,  
    mediaType: ["image"],  
    sourceType: ["album"],  
    sizeType: ["compressed"],  
    success(res) {  
        const path = res.tempFiles?.[0]?.tempFilePath;  
        if (!path) return reject(false);  
        resolve(path);  
    },  
    fail: function (e) {  
        reject(e);  
    },  
});

操作步骤:

manifest中配置

"excludePermissions" : [
    "<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>",
    "<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\"/>"
]

在安卓10中调用

uni.chooseMedia({
    count: 1,
    mediaType: ["image"],
    sourceType: ["album"],
    sizeType: ["compressed"],
    success(res) {
        const path = res.tempFiles?.[0]?.tempFilePath;
        if (!path) return reject(false);
        resolve(path);
    },
    fail: function (e) {
        reject(e);
    },
});
`

更多关于uni-app uni.chooseMedia 安卓10版本 在选择图片后闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app uni.chooseMedia 安卓10版本 在选择图片后闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这个闪退问题可能是由于Android 10的存储权限策略变更导致的。在Android 10中引入了Scoped Storage机制,需要注意以下几点:

  1. 不要排除READ_MEDIA_IMAGES权限,这个权限在Android 10+是必须的:
"excludePermissions" : [
    // 移除这两行
    // "<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\"/>",
    // "<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\"/>"
]
  1. 确保在调用chooseMedia前已经获取了存储权限:
// 先检查并请求权限
const res = await uni.getSetting()
if (!res.authSetting['scope.writePhotosAlbum']) {
    await uni.authorize({
        scope: 'scope.writePhotosAlbum'
    })
}
  1. 华为机型可能有自己的权限管理,建议在manifest.json中添加以下配置:
"android": {
    "permissionExternalStorage": {
        "request": "once",
        "prompt": "应用需要访问相册以选择图片"
    }
}
  1. 如果问题仍然存在,可以尝试使用chooseImage替代:
uni.chooseImage({
    count: 1,
    sourceType: ['album'],
    success(res) {
        const path = res.tempFilePaths[0]
        // ...
    }
})
回到顶部