uni-app 安卓13动态授权之后无法选择图片

uni-app 安卓13动态授权之后无法选择图片

示例代码:

uni.showActionSheet({  
    itemList: ['图片', '视频'],  
    success: (res) => {  
        if (res.tapIndex == 0) {  
            plus.android.requestPermissions(['android.permission.READ_MEDIA_IMAGES'], function(e) {    
                if (e.deniedAlways.length > 0) { //权限被永久拒绝    
                    console.log('Present Denied!!! ' + e.deniedPresent.toString());   
                    return   
                }  
                if (e.deniedPresent.length > 0) { //权限被临时拒绝    
                    console.log('Granted!!! ' + e.granted.toString());    
                    uni.chooseImage({  
                        count: 1,  
                        sourceType: ['album'],  
                        sizeType: ['original'],  
                        success: function(e) {  
                            let body = {  
                                path: plus.io.convertLocalFileSystemURL(e.tempFilePaths[0]),  
                                type:'image'  
                            }  
                            _this.addChatMsgData(body)  
                        }  
                    })  
                }  
            })  
        } else {  
            _this.selectVideo()  
        }  
    }  
})

操作步骤:

uni.chooseImage 动态收取图片选择权限之后,进入选择图片界面,无法选择图片

预期结果:

希望能对图片进行选择

实际结果:

无法选择

bug描述:

在自定义基座中,动态获取了 plus.android.requestPermissions([‘android.permission.READ_MEDIA_IMAGES’]权限之后,进入相册页面,没法读取到图片不能选择,manifest也申明了,还是出现此问题

Image

信息类别 详细信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 window11
HBuilderX类型 正式
HBuilderX版本号 3.99
手机系统 Android
手机系统版本号 Android 13
手机厂商 小米
手机机型 xiaoxi 11 Lite 5G NE
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app 安卓13动态授权之后无法选择图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

问题图片是这样的,并且我的应用是纯nvue开发渲染模式是采用默认的,并没有修改到nvue渲染

更多关于uni-app 安卓13动态授权之后无法选择图片的实战教程也可以访问 https://www.itying.com/category-93-b0.html


请问解决了吗

请问这个问题解决了么?

在 uni-app 中,如果你在 Android 13 上遇到动态授权后无法选择图片的问题,可能是由于权限管理或文件访问机制的变化导致的。以下是一些可能的解决方案和排查步骤:


1. 检查权限

Android 13 引入了更严格的权限管理,特别是对媒体文件的访问。确保你已经正确请求了以下权限:

  • READ_MEDIA_IMAGES:用于读取图片。
  • READ_MEDIA_VIDEO:用于读取视频。
  • READ_MEDIA_AUDIO:用于读取音频。

manifest.json 中添加以下权限:

{
  "permissions": [
    "android.permission.READ_MEDIA_IMAGES",
    "android.permission.READ_MEDIA_VIDEO",
    "android.permission.READ_MEDIA_AUDIO"
  ]
}

并在代码中动态请求权限:

uni.authorize({
  scope: 'scope.READ_MEDIA_IMAGES',
  success() {
    console.log('授权成功');
  },
  fail() {
    console.log('授权失败');
  }
});

2. 使用正确的 API 选择图片

确保你使用的是 uni-app 提供的正确 API 来选择图片。例如:

uni.chooseImage({
  count: 1,
  sourceType: ['album'],
  success(res) {
    console.log('选择的图片路径:', res.tempFilePaths[0]);
  },
  fail(err) {
    console.log('选择图片失败:', err);
  }
});

3. 检查文件访问机制

Android 13 引入了 Scoped Storage,限制了应用对文件系统的访问。如果你的应用需要访问特定目录,可以使用 ACTION_OPEN_DOCUMENTACTION_GET_CONTENT 来获取文件访问权限。

在 uni-app 中,uni.chooseImage 已经适配了这些机制,但如果你使用的是自定义文件选择器,可能需要额外处理。


4. 检查 targetSdkVersion

确保你的 targetSdkVersion 设置为 33(Android 13)。在 manifest.json 中检查:

{
  "app-plus": {
    "android": {
      "targetSdkVersion": 33
    }
  }
}

如果 targetSdkVersion 低于 33,可能会导致权限问题。


5. 调试日志

在调试模式下运行应用,查看控制台日志,检查是否有权限相关的错误信息。例如:

uni.getSetting({
  success(res) {
    console.log('当前权限状态:', res.authSetting);
  }
});
回到顶部