uni-app 标准基座AndroidManifest.xml缺少MANAGE_EXTERNAL_STORAGE权限

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

uni-app 标准基座AndroidManifest.xml缺少MANAGE_EXTERNAL_STORAGE权限

开发环境 版本号 项目创建方式
Mac 12.3 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Mac

HBuilderX类型:正式

HBuilderX版本号:4.36

手机系统:Android

手机系统版本号:Android 13

手机厂商:小米

手机机型:RedmiK30pro

页面类型:vue

vue版本:vue3

打包方式:云端

示例代码:

export function requestItemPermission(item: string){  
    if (UTSAndroid.checkSystemPermissionGranted(UTSAndroid.getUniActivity()!, [item])) {  
        uni.showToast({  
            title: "权限已经同意了",  
            position: "bottom"  
        })  
        return  
    }  
    UTSAndroid.requestSystemPermission(UTSAndroid.getUniActivity()!, [item], (_ : boolean, p : string[]) => {  
        console.log(p)  
    }, (_ : boolean, p : string[]) => {  
        uni.showToast({  
            title: "权限被拒绝了",  
            position: "bottom"  
        })  
        console.log(p)  
    })  
}

操作步骤:

运行上面代码申请该权限报错,无法对sd卡进行创建目录 创建文件等操作

预期结果:

加上该权限 允许对文件进行操作

实际结果:

不能对sd卡上的其它文件进行操作

bug描述:

标准基座运行的时候申请该<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />‌权限,提示没在AndroidManifest.xml中定义


2 回复

当声明了 READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE仅允许访问媒体文件 当声明了 MANAGE_EXTERNAL_STORAGE 会增加允许管理所有文件


在uni-app项目中,如果标准基座(即HBuilderX自带的基座或者通过HBuilderX打包的自定义基座)的AndroidManifest.xml文件中缺少MANAGE_EXTERNAL_STORAGE权限,你可以通过修改manifest.json文件来向Android平台请求该权限。uni-app允许开发者通过配置manifest.json来自动生成或修改AndroidManifest.xml

以下是如何在manifest.json中添加MANAGE_EXTERNAL_STORAGE权限的步骤和示例代码:

  1. 打开你的uni-app项目的根目录,找到并打开manifest.json文件。

  2. 定位到app-plus下的android配置部分。你需要在这个部分添加一个新的权限配置。

  3. 添加MANAGE_EXTERNAL_STORAGE权限。具体代码如下:

{
  "mp-weixin": {},
  "app-plus": {
    "name": "yourAppName",
    "version": {
      "name": "1.0.0",
      "code": "100"
    },
    "android": {
      "permissions": [
        // 其他已存在的权限
        "MANAGE_EXTERNAL_STORAGE"
      ],
      // 其他Android相关配置
    },
    // 其他app-plus相关配置
  }
}

在上述代码中,permissions数组内添加了"MANAGE_EXTERNAL_STORAGE"字符串,这表示向Android系统请求管理外部存储的权限。

  1. 保存manifest.json文件并重新编译你的uni-app项目。在HBuilderX中,你可以直接点击“发行”->“原生App-云端打包”或“原生App-本地打包”来重新生成APK文件。

  2. 安装并测试新的APK。确保你的设备或模拟器运行的是Android 6.0(API级别23)或更高版本,因为从Android 6.0开始,引入了运行时权限模型,即使用户在AndroidManifest.xml中声明了权限,应用也可能需要在运行时请求用户授予该权限。

  3. 运行时请求权限(如果需要)。如果你的应用针对的是Android 6.0或更高版本,并且功能确实需要在运行时访问外部存储,你可能还需要在代码中添加运行时权限请求逻辑。这通常涉及到使用Android.permission.MANAGE_EXTERNAL_STORAGEActivityCompat.requestPermissions等方法。

注意:MANAGE_EXTERNAL_STORAGE权限在Android 11(API级别30)及以上版本中已被废弃,并被MANAGE_EXTERNAL_STORAGE的细粒度替代权限(如READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE,以及针对特定目录的SCOPED_STORAGE访问)所替代。确保你的应用针对的目标SDK版本和运行时权限请求逻辑与你的目标Android版本相匹配。

回到顶部