getActivity / XXPermissions

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

安卓13 READ_MEDIA_IMAGES 权限问题 #187

Closed yulu1121 closed 1 year ago

yulu1121 commented 1 year ago
getActivity commented 1 year ago

XXPermissions-16.8.aar.zip

getActivity commented 1 year ago

小伙子,问题修复了,你用这个包再试一下看看有没有问题。

yulu1121 commented 1 year ago

您好,轮子哥,我用您最新的包测试了,安卓13的手机是没有问题的,13以下的手机会存在进入请求权限,允许也会回调拒绝的方法。测试手机:安卓11、minSdkVersion 21、targetSdkVersion 33

/**

而XXPermissions.isGranted这个方法返回的是true, List permissionList = new ArrayList<>;();

permissionList.add(Permission.READ_MEDIA_IMAGES); permissionList.add(Permission.CAMERA); if (XXPermissions.isGranted(mContext, permissionList)) { configPicSelector(UserFormationActivity.this); } else { requestPermission(); }

getActivity commented 1 year ago

小伙子,你用什么手机(品牌机型,Android 版本)做的测试?

yulu1121 commented 1 year ago

Android 11用的是不知名UROVO品牌的PDA手机, 荣耀Play4T Android 10也会出现这个问题,就是申请READ_MEDIA_IMAGES权限,同意会走拒绝的方法

------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2023年2月28日(星期二) 上午9:33 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [getActivity/XXPermissions] 安卓13 READ_MEDIA_IMAGES 权限问题 (Issue #187)

小伙子,你用什么手机(品牌机型,Android 版本)做的测试?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

getActivity commented 1 year ago

@yulu1121 小伙子,你用 Android Studio 自带的模拟器看看有没有同样的问题?

yulu1121 commented 1 year ago

轮子哥,我查了下,原因是 Andorid 13 以下是没有 READ_MEDIA_IMAGES 这个权限,所以会走失败的方法,而您在PermissionChecker 类的 checkStoragePermission 方法里对 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 进行了强关联,不能单独申请 READ_EXTERNAL_STORAGE,申请会异常,解决办法: 针对 TargetSDK 为 33 的情况,将强关联的代码注释,由用户自己判断 SDK 版本 ,而 TargetSDK 33 以下的,不用注释可以直接这样写

if (Build.VERSION.SDK_INT >= 33){
    permissionList.add(Permission.READ_MEDIA_IMAGES);
} else {
    permissionList.add(Permission.READ_EXTERNAL_STORAGE);
}

当然这是针对我要上架谷歌应用市场的处理,而国内平台对写入SD卡的权限并未强制要求,您可以不处理,我把代码下到本地,自己处理好了。您可以关闭这个问题了,谢谢! 注释代码:

if (AndroidVersion.getTargetSdkVersionCode(context) >= AndroidVersion.ANDROID_13 &&
        (PermissionUtils.containsPermission(requestPermissions, Permission.READ_EXTERNAL_STORAGE) ||
                PermissionUtils.containsPermission(requestPermissions, Permission.WRITE_EXTERNAL_STORAGE))) {
    // 当 targetSdkVersion >= 33 应该使用 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、READ_MEDIA_AUDIO 来代替 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE
    // 因为经过测试,如果当 targetSdkVersion >= 33 申请 READ_EXTERNAL_STORAGE 或者 WRITE_EXTERNAL_STORAGE 会被系统直接拒绝,不会弹出任何授权框
    throw new IllegalArgumentException("When targetSdkVersion >= 33 should use " +
            Permission.READ_MEDIA_IMAGES + ", " + Permission.READ_MEDIA_VIDEO + ", " + Permission.READ_MEDIA_AUDIO +
            " instead of " + Permission.READ_EXTERNAL_STORAGE + ", " + Permission.WRITE_EXTERNAL_STORAGE);
}
getActivity commented 1 year ago

XXPermissions-16.8.apk.zip

getActivity commented 1 year ago

小伙子,我自己用 Android 10、Android 11、Android 12 模拟器测试,都是没有问题的,你再帮我试试看这个 apk 有没有问题,下载 demo 后点击第一个按钮会申请 READ_MEDIA_IMAGES 和 CAMERA 权限,我这边经过测试是没有问题的。

yulu1121 commented 1 year ago

可以是可以,但是您应该Manifest添加了WRITE_EXTERNAL_STORAGE权限,我测试了下,清单文件里加WRITE_EXTERNAL_STORAGE就可以,去掉就不行,我是不需要这个写入权限的

getActivity commented 1 year ago

XXPermissions-16.8.aar.zip

getActivity commented 1 year ago

小伙子,在清单文件中添加 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove" /> 确实会导致回调失败,我排查了一下,原因是我在 PermissionChecker.optimizeDeprecatedPermission 方法中加了一段代码逻辑,如果是 Android 13 版本以下申请 READ_MEDIA_IMAGESREAD_MEDIA_VIDEOREAD_MEDIA_AUDIO 会自动添加 READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE 权限,我现在已经把自动添加 WRITE_EXTERNAL_STORAGE 权限的逻辑去掉了,测试了没有问题了,你可以下载上面的包再试一下。

yulu1121 commented 1 year ago

可以了,谢谢!

------------------ 原始邮件 ------------------ 发件人: "getActivity/XXPermissions" @.>; 发送时间: 2023年2月28日(星期二) 下午4:56 @.>; @.**@.>; 主题: Re: [getActivity/XXPermissions] 安卓13 READ_MEDIA_IMAGES 权限问题 (Issue #187)

XXPermissions-16.8.aar.zip

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

getActivity commented 1 year ago

小伙子,远程依赖更新了,你更新到 16.8 版本后再试一下。