getActivity / XXPermissions

Android 权限请求框架,已适配 Android 14
Apache License 2.0
5.44k stars 735 forks source link

[Bug]:一个荣耀手机鸿蒙系统7.0.0.191的兼容问题 #269

Closed XiaoYong1109 closed 3 weeks ago

XiaoYong1109 commented 3 months ago

框架版本【必填】

com.github.getActivity:XXPermissions:18.6

问题描述【必填】

测试手机自动更新系统到图片这个版本后,获取到的所有文件管理权限后无法获取到照片和视频权限.我现在获取所有文件管理权限的代码如下 public static void getStorage(Context context,XXPermissionsCallBack callBack) { getPermissions(context,callBack,Permission.MANAGE_EXTERNAL_STORAGE); }

根据你的demo以及说明: READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_VISUAL_USER_SELECTED这些权限我需要在sdk 33版本才能获取,现在在荣耀7.0最新版本上,却导致31需要申请这些权限,请问能兼容一下这个问题 微信图片_20240201111738

微信图片_20240201111910

复现步骤【必填】

1.一台鸿蒙如图版本手机 2.一个targetSdkVersion:31的测试demo 3.安装后获取所有文件管理权限

是否必现【必填】

项目 targetSdkVersion【必填】

31

出现问题的手机信息【必填】

荣耀手机

出现问题的安卓版本【必填】

Android13

问题信息的来源渠道【必填】

自己遇到的

是部分机型还是所有机型都会出现【必答】

暂时就发现荣耀手机最新系统版本

框架最新的版本是否存在这个问题【必答】

框架文档是否提及了该问题【必答】

是否已经查阅框架文档但还未能解决的【必答】

issue 列表中是否有人曾提过类似的问题【必答】

是否已经搜索过了 issue 列表但还未能解决的【必答】

是否可以通过 Demo 来复现该问题【必答】

提供报错堆栈

No response

提供截图或视频

No response

提供解决方案

No response

getActivity commented 3 months ago

小伙子,我理解这个问题是手机厂商的 Bug 吧?你不是应该要找手机厂商反馈?

XiaoYong1109 commented 3 months ago

从明面上看上去,应该是手机厂商的bug,提上来主要是看大佬是否能复现bug,对权限申请的版本兼容不太熟,是否有办法避免这种情况出现 在这台手机上,我试了当我使用demo,targetSdkVersion为29的时候WRITE_EXTERNAL_STORAGE这两个权限申请能正常使用以及授权,但是当我的targetSdkVersion为31的时候,使用MANAGE_EXTERNAL_STORAGE申请权限,却无法获取到相册权限.都是用的com.github.getActivity:XXPermissions:18.6

XiaoYong1109 commented 3 months ago

问题解决,但是大佬,你这个权限可能有问题Permission.MANAGE_EXTERNAL_STORAGE 我的解决方案是:加上了你的这个代码 <meta-data android:name="ScopedStorage" android:value="true" /> 然后直接申请Permission.READ_EXTERNAL_STORAGE,Permission.WRITE_EXTERNAL_STORAGE这两个权限解决了这个问题

前面你这个框架 如果不加meta-data,我去申请READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE会报错,,所以导致我选择申请了Permission.MANAGE_EXTERNAL_STORAGE,在其他高版本手机上权限申请没有问题,结果这个手机上碰到了问题 最后发现targetSdkVersion31,已经是强制分区存储,即时我加了 android:requestLegacyExternalStorage="true"这个也没用. 那大佬是否可以检测下 当targetSdkVersion>=31 不要去加你这个meta-data? 本身强制分区了

getActivity commented 3 months ago

@XiaoYong1109 小伙子,申请了 Permission.MANAGE_EXTERNAL_STORAGE 按理是可以获取媒体文件的,因为媒体文件始终是放在 SD 卡的,而有了 Permission.MANAGE_EXTERNAL_STORAGE 权限之后,也就代表拥有了 SD 卡完整的控制权,按照这个逻辑走,有 Permission.MANAGE_EXTERNAL_STORAGE 权限的情况下肯定是可以读取媒体文件的,所以断定这个是厂商的问题,还是建议你反馈一下给手机厂商,提交一个工单给他们处理一下。

Darius-Chan commented 3 months ago

问题解决,但是大佬,你这个权限可能有问题Permission.MANAGE_EXTERNAL_STORAGE 我的解决方案是:加上了你的这个代码 然后直接申请Permission.READ_EXTERNAL_STORAGE,Permission.WRITE_EXTERNAL_STORAGE这两个权限解决了这个问题

前面你这个框架 如果不加meta-data,我去申请READ_EXTERNAL_STORAGE,WRITE_EXTERNAL_STORAGE会报错,,所以导致我选择申请了Permission.MANAGE_EXTERNAL_STORAGE,在其他高版本手机上权限申请没有问题,结果这个手机上碰到了问题 最后发现targetSdkVersion31,已经是强制分区存储,即时我加了 android:requestLegacyExternalStorage="true"这个也没用. 那大佬是否可以检测下 当targetSdkVersion>=31 不要去加你这个meta-data? 本身强制分区了

大佬你这个问题怎么解决 我也遇到了,申请了MANAGE_EXTERNAL_STORAGE ,但是还要是去申请媒体访问权限的问题。

getActivity commented 2 months ago
image
getActivity commented 2 months ago

@Darius-Chan @XiaoYong1109 小伙子,可以先屏蔽框架内部的错误检测机制,来解决你的问题,但是这个不是一个长久之计,我觉得真正解决这个问题,还是要反馈给厂商,因为 Android 原生应该是没有这个问题的。

huaxuanHan commented 2 months ago

遇到了同样的问题,不是荣耀,是一款专用设备,Android11的系统,同样的代码在中兴Android11上就没问题,在这个设备上就是显示权限被拒绝,也不算是拒绝,申请MANAGE_EXTERNAL_STORAGE权限显示成功,能打开相册选择图片,但是要使用图片就不行,使用的最新框架,看了@XiaoYong1109的解决办法,把MANAGE_EXTERNAL_STORAGE换成WRITE_EXTERNAL_STORAGE,问题解决,这个可能是国内厂商的系统问题,等厂商解决估计是不大可能,还是希望大佬看看能不能帮忙解决一下,

同时申请MANAGE_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限,最新框架加上unchecked()也还是报错,是我的问题吗?

getActivity commented 2 months ago

@huaxuanHan 小伙子,你加上 unchecked() 还是会报错的问题,我在 18.62 版本上面修复了,你升级到最新版本再试试看。

huaxuanHan commented 2 months ago

收到,上面说到的存储权限问题,我也想到一个解决办法,在不同的页面请求两次,一次MANAGE_EXTERNAL_STORAGE,一次WRITE_EXTERNAL_STORAGE,这样应该也可以解决问题