uni-app 急急急,plus.android.requestPermissions 获取WRITE_EXTERNAL_STORAGE vivo获取权限始终是永久禁用

发布于 1周前 作者 itying888 最后一次编辑是 5天前 来自 Uni-App

uni-app 急急急,plus.android.requestPermissions 获取WRITE_EXTERNAL_STORAGE vivo获取权限始终是永久禁用

plus.android.requestPermissions 获取WRITE_EXTERNAL_STORAGE vivo获取权限始终是永久禁用 获取CAMERA都有问题,只有相册会出现这个问题
在上传图片时获取相册文件读取权限,始终获取到的状态是永久禁用(resultObj.deniedAlways)
手动更改权限为允许,再次进入app,获取到的状态依旧是禁用,清除缓存后再次进入app也不行
测试包自定义基座没有出现这个问题,其他机型也没有这个问题
打包时拍摄、文件读取权限都加入到manifest.json文件中了

这个问题四月份出现过一次,后来更新好了,现在又出现了!!!提bug也没人理!!!!

bug问题链接,实现代码在这里比较全

https:https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20240905/708b3c7bfefcc1abcdcaf3802bb84e19.jpg

https:https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20240905/6a7c3f080652d69814ebd9e58933f9fd.jpg

飞书20240905-111353.mp4_.zip


12 回复

Android 33 以上设备
WRITE_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" />

想问一下,如果是文件呢?

遇到一样的问题

你好大佬,有解决方案了麻烦踢我一下,万分感谢!!!

回复 3***@qq.com: 你看看你的targetSdkVersion设置的多少

回复 传播星球: 我这边是33

回复 3***@qq.com: 改成30,就可以了

回复 传播星球: 好的大佬,感谢感谢,我去试试

除了改targetSdkVersion成30,还有别的办法吗,上架google只能是33啊

想问有解决办法吗?

在处理 uni-app 中使用 plus.android.requestPermissions 获取 WRITE_EXTERNAL_STORAGE 权限时,如果在 vivo 设备上遇到权限始终是永久禁用的问题,这通常与 vivo 系统的权限管理策略有关。vivo 以及其他一些国产 Android 设备,为了增强用户隐私保护,对权限管理进行了更严格的控制。

尽管无法直接修改系统行为以绕过这一限制,但你可以通过以下方式优化你的应用,以更好地处理权限请求,并向用户提供清晰的权限使用说明。

以下是一个示例代码,展示如何在 uni-app 中请求 WRITE_EXTERNAL_STORAGE 权限,并处理权限请求的结果,包括处理被永久拒绝的情况:

// 检查并请求WRITE_EXTERNAL_STORAGE权限
function requestStoragePermission() {
    const permissions = ['android.permission.WRITE_EXTERNAL_STORAGE'];
    plus.android.requestPermissions(permissions, function(event) {
        const granted = event.deniedAlways.length === 0 && event.granted.length > 0;
        if (granted) {
            console.log('Storage permission granted.');
            // 权限被授予,执行相关操作
        } else {
            console.log('Storage permission denied.');
            // 处理权限被拒绝的情况
            if (event.deniedAlways.includes('android.permission.WRITE_EXTERNAL_STORAGE')) {
                console.log('Storage permission permanently denied.');
                // 显示提示信息,引导用户到设置中手动开启权限
                uni.showModal({
                    title: '提示',
                    content: '应用需要存储权限才能正常工作,请在设置中手动开启。',
                    success: function(res) {
                        if (res.confirm) {
                            // 跳转到应用权限设置页面(vivo设备可能有特殊URL)
                            // 注意:不同设备可能有不同的跳转方式,vivo设备可能需要特定处理
                            // 以下是一个通用跳转示例,可能需要根据vivo设备做调整
                            const appInfoUrl = 'package:' + plus.runtime.manifest.packagename;
                            plus.runtime.openURL(appInfoUrl, '_blank', {});
                        }
                    }
                });
            }
        }
    }, function(e) {
        console.error('Request permissions failed: ' + JSON.stringify(e));
    });
}

// 调用函数请求权限
requestStoragePermission();

注意:

  1. vivo 设备可能有特定的系统设置页面 URL,你可能需要查找 vivo 的官方文档或社区以获取正确的跳转 URL。
  2. 用户教育很重要:在请求权限前,确保向用户清晰解释为什么需要该权限,这有助于提高权限授予率。
  3. 考虑权限被拒绝后的替代方案,如使用应用内存储而非外部存储。
回到顶部