uni-app 在 compileSdkVersion 33,Android 13、14 手机版本中,权限管理看不到文件和文档权限

发布于 1周前 作者 ionicwang 来自 Uni-App

uni-app 在 compileSdkVersion 33,Android 13、14 手机版本中,权限管理看不到文件和文档权限

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
PC系统版本 13.4 (22F66)
HBuilderX类型 正式
HBuilderX版本 3.98
手机系统 Android
手机系统版本 Android 13
手机厂商 vivo
手机机型 android 13
页面类型 vue
vue版本 vue2
打包方式 离线
项目创建方式 HBuilderX

示例代码:

amap-gp-libs-release.aar  
aps-igexin-fcm-release.aar  
aps-release.aar  
aps-unipush-gp-release.aar  
Bluetooth-release.aar  
breakpad-build-release.aar  
fcm-3.1.1.aar  
fingerprint-release.aar  
geolocation-amap-release.aar  
lib.5plus.base-release.aar  
oauth-weixin-release.aar  
payment-alipay-release.aar  
payment-weixin-release.aar  
sdk-for-gj-4.4.3.1.aar  
uniapp-v8-release.aar
compileSdkVersion 33  
buildToolsVersion "33.0.0"  
minSdkVersion 22  
targetSdkVersion 33
dependencies {  
    implementation fileTree(include: ['*.jar'], dir: 'libs')  
    implementation fileTree(include: ['*.aar'], dir: 'libs')  
    implementation 'androidx.appcompat:appcompat:1.1.0'  
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'  
    implementation 'androidx.recyclerview:recyclerview:1.1.0'  
    implementation 'com.facebook.fresco:fresco:2.5.0'  
    implementation "com.facebook.fresco:animated-gif:2.5.0"  
    implementation 'com.github.bumptech.glide:glide:4.9.0'  
    implementation 'com.alibaba:fastjson:1.2.83'  
    implementation 'androidx.webkit:webkit:1.3.0'  
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'  
    implementation 'androidx.core:core:1.1.0'  
    implementation "androidx.fragment:fragment:1.1.0"  
    implementation 'androidx.multidex:multidex:2.0.1'  
}
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />  
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />  
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />

操作步骤:

预期结果:

在android13、14 下可正确添加文件和文档权限

实际结果:

无法在android13、14 下添加文件和文档权限

bug描述:

compileSdkVersion是33,手机版本版本是Android13之后,在权限管理也看不到文件和文档得权限


1 回复

uni-app 开发中,如果你在 compileSdkVersion 设置为 33 的情况下,发现 Android 13 或 14 设备上无法看到文件和文档权限,可能是由于以下几个原因:

1. 权限声明问题

  • 在 Android 13 及以上版本中,访问文件和文档的权限发生了变化。你需要确保在 AndroidManifest.xml 文件中正确声明了相关权限。
  • 对于 Android 13 及以上版本,访问媒体文件(如图片、视频、音频)需要声明 READ_MEDIA_IMAGESREAD_MEDIA_VIDEOREAD_MEDIA_AUDIO 等权限。
  • 对于访问所有文件,仍然需要 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限。
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2. 动态权限请求

  • 在 Android 6.0 及以上版本中,部分权限需要动态请求。你需要在代码中动态请求这些权限。
  • 你可以使用 uni-app 提供的 uni.authorizeuni.requestAuthorization 方法来请求权限。
uni.authorize({
    scope: 'scope.writePhotosAlbum',
    success() {
        console.log('权限授权成功');
    },
    fail() {
        console.log('权限授权失败');
    }
});

3. 权限管理界面问题

  • 在 Android 13 及以上版本中,权限管理界面可能有所变化。用户需要在应用设置中手动授予文件和文档权限。
  • 你可以引导用户进入应用设置页面,手动授予权限。
uni.openSetting({
    success(res) {
        console.log('打开设置页面成功', res);
    },
    fail() {
        console.log('打开设置页面失败');
    }
});

4. 适配 Android 13 及以上版本

  • Android 13 引入了更细粒度的媒体权限管理,你需要确保你的应用适配了这些变化。
  • 如果你需要访问所有文件,可能需要使用 MANAGE_EXTERNAL_STORAGE 权限,并且需要向 Google Play 提交申请。
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

5. 检查 compileSdkVersiontargetSdkVersion

  • 确保你的 compileSdkVersiontargetSdkVersion 都设置为 33 或更高版本,以确保应用能够正确适配 Android 13 及以上版本。
android {
    compileSdkVersion 33
    defaultConfig {
        targetSdkVersion 33
    }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!