uni-app 标准基座AndroidManifest.xml缺少MANAGE_EXTERNAL_STORAGE权限
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中定义
当声明了 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
权限的步骤和示例代码:
-
打开你的uni-app项目的根目录,找到并打开
manifest.json
文件。 -
定位到
app-plus
下的android
配置部分。你需要在这个部分添加一个新的权限配置。 -
添加
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系统请求管理外部存储的权限。
-
保存
manifest.json
文件并重新编译你的uni-app项目。在HBuilderX中,你可以直接点击“发行”->“原生App-云端打包”或“原生App-本地打包”来重新生成APK文件。 -
安装并测试新的APK。确保你的设备或模拟器运行的是Android 6.0(API级别23)或更高版本,因为从Android 6.0开始,引入了运行时权限模型,即使用户在
AndroidManifest.xml
中声明了权限,应用也可能需要在运行时请求用户授予该权限。 -
运行时请求权限(如果需要)。如果你的应用针对的是Android 6.0或更高版本,并且功能确实需要在运行时访问外部存储,你可能还需要在代码中添加运行时权限请求逻辑。这通常涉及到使用
Android.permission.MANAGE_EXTERNAL_STORAGE
和ActivityCompat.requestPermissions
等方法。
注意:MANAGE_EXTERNAL_STORAGE
权限在Android 11(API级别30)及以上版本中已被废弃,并被MANAGE_EXTERNAL_STORAGE
的细粒度替代权限(如READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
,以及针对特定目录的SCOPED_STORAGE
访问)所替代。确保你的应用针对的目标SDK版本和运行时权限请求逻辑与你的目标Android版本相匹配。