uni-app 云打包的APP在鸿蒙系统部分版本首次启动不会申请存储权限
uni-app 云打包的APP在鸿蒙系统部分版本首次启动不会申请存储权限
操作步骤:
- 写一个demo,勾选存储权限,云打包,最后安装即可
预期结果:
- 启动时自动申请存储权限
实际结果:
- 未弹窗申请权限,直接进入了首页
bug描述:
- 使用云打包的APP在华为鸿蒙2.0.0.218上面首次安装启动时不会弹窗申请存储权限,其余品牌手机和其他鸿蒙版本都会申请。manifest里面相关权限都已勾选。该系统版本可在腾讯wetest.qq.com平台找到真机。
| 开发环境 | 版本号 | 项目创建方式 |
|-------------------|-----------|--------------|
| PC开发环境操作系统 | Windows | |
| PC开发环境操作系统版本号 | win10 | |
| HBuilderX类型 | 正式 | |
| HBuilderX版本号 | 3.4.7 | |
| 手机系统 | Android | |
| 手机系统版本号 | Android 10| |
| 手机厂商 | 华为 | |
| 手机机型 | mate 30 pro 5g | |
| 页面类型 | vue | |
| vue版本 | vue2 | |
| 打包方式 | 云端 | |
| 项目创建方式 | HBuilderX | |
更多关于uni-app 云打包的APP在鸿蒙系统部分版本首次启动不会申请存储权限的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个事,我觉得是鸿蒙有问题 既然其他都可以,鸿蒙不可以
更多关于uni-app 云打包的APP在鸿蒙系统部分版本首次启动不会申请存储权限的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
确实是鸿蒙特定版本的问题,最新的鸿蒙版本没有这个问题,但是总有用户停留在这个版本,如果用户不愿意升级或者不能升级,那么就只能我们开发者这端想办法来处理了。
但是,这个好像还不好解决的样子
除非你想办法让他第一次的时候自动重启一下
在鸿蒙系统(HarmonyOS)的部分版本中,使用 uni-app 云打包的 APP 在首次启动时可能会遇到不自动申请存储权限的问题。这可能是由于系统权限管理机制的差异或 uni-app 打包时默认配置的限制导致的。以下是一些可能的解决方案和排查步骤:
1. 检查 uni-app 的权限配置
在 manifest.json
文件中,确保已正确声明存储权限:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
]
}
}
}
}
2. 动态申请权限
在应用启动时,通过代码动态申请存储权限。uni-app 提供了 uni.authorize
和 uni.getSetting
等 API 来管理权限。示例代码:
// 在 App.vue 或首页的 onLaunch 中调用
uni.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
console.log('存储权限已授权');
},
fail() {
console.log('存储权限未授权');
}
});
}
}
});
3. 适配鸿蒙系统的权限机制
鸿蒙系统可能在某些版本中对权限管理有特殊要求。可以尝试以下方法:
- 检查系统版本:在代码中判断当前系统是否为鸿蒙系统,并针对性地处理权限申请。
- 使用鸿蒙 SDK:如果问题较为复杂,可以考虑使用鸿蒙 SDK 进行权限管理的适配。
4. 更新 uni-app SDK 和 HBuilderX
确保使用的 uni-app SDK 和 HBuilderX 是最新版本,因为官方可能会修复一些兼容性问题。
5. 测试不同鸿蒙版本
在不同版本的鸿蒙系统上进行测试,确认问题是否仅出现在特定版本中。如果是,可以针对该版本进行特殊处理。
6. 用户引导
如果无法自动申请权限,可以在应用启动时弹出提示,引导用户手动开启存储权限。例如:
uni.showModal({
title: '提示',
content: '应用需要存储权限以正常运行,请前往设置开启权限。',
success(res) {
if (res.confirm) {
uni.openSetting();
}
}
});