From 2e54b24ac7242472db7b2f88800e003f6a35db34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Android=20=E8=BD=AE=E5=AD=90=E5=93=A5?= Date: Wed, 20 Mar 2024 12:59:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9D=83=E9=99=90=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=9C=BA=E5=88=B6=E5=88=A4=E6=96=AD=20=E9=80=82?= =?UTF-8?q?=E9=85=8D=20OPPO=20=E5=BA=94=E7=94=A8=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=8F=97=E9=98=BB=E8=B7=B3=E8=BD=AC=E4=BC=98=E5=8C=96=E6=96=B9?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README-en.md | 6 +-- README.md | 6 +-- app/build.gradle | 4 +- library/build.gradle | 4 +- .../hjq/permissions/PermissionChecker.java | 51 ++++++++++++++----- .../PermissionDelegateImplV14.java | 3 +- .../permissions/PermissionIntentManager.java | 19 ++++++- .../com/hjq/permissions/PermissionUtils.java | 2 +- 8 files changed, 69 insertions(+), 26 deletions(-) diff --git a/README-en.md b/README-en.md index bbadfcd..ea279a0 100644 --- a/README-en.md +++ b/README-en.md @@ -6,7 +6,7 @@ * project address: [Github](https://github.com/getActivity/XXPermissions) -* [Click here to download demo apk directly](https://github.com/getActivity/XXPermissions/releases/download/18.6/XXPermissions.apk) +* [Click here to download demo apk directly](https://github.com/getActivity/XXPermissions/releases/download/18.62/XXPermissions.apk) ![](picture/en/demo_request_permission_activity.jpg) ![](picture/en/demo_request_single_permission.jpg) ![](picture/en/demo_request_group_permission.jpg) @@ -55,7 +55,7 @@ android { dependencies { // Permission request framework:https://github.com/getActivity/XXPermissions - implementation 'com.github.getActivity:XXPermissions:18.6' + implementation 'com.github.getActivity:XXPermissions:18.62' } ``` @@ -217,7 +217,7 @@ XXPermissions.setInterceptor(new OnPermissionInterceptor() {}); | Adaptation details | [XXPermissions](https://github.com/getActivity/XXPermissions) | [AndPermission](https://github.com/yanzhenjie/AndPermission) | [PermissionX](https://github.com/guolindev/PermissionX) | [AndroidUtilCode-PermissionUtils](https://github.com/Blankj/AndroidUtilCode) | [PermissionsDispatcher](https://github.com/permissions-dispatcher/PermissionsDispatcher) | [RxPermissions](https://github.com/tbruyelle/RxPermissions) | [EasyPermissions](https://github.com/googlesamples/easypermissions) | |:-------------------------------------------------------------:| :----------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------: | -| Corresponding version | 18.6 | 2.0.3 | 1.7.1 | 1.31.0 | 4.9.2 | 0.12 | 3.0.0 | +| Corresponding version | 18.62 | 2.0.3 | 1.7.1 | 1.31.0 | 4.9.2 | 0.12 | 3.0.0 | | Number of issues | [![](https://img.shields.io/github/issues/getActivity/XXPermissions.svg)](https://github.com/getActivity/XXPermissions/issues) | [![](https://img.shields.io/github/issues/yanzhenjie/AndPermission.svg)](https://github.com/yanzhenjie/AndPermission/issues) | [![](https://img.shields.io/github/issues/guolindev/PermissionX.svg)](https://github.com/guolindev/PermissionX/issues) | [![](https://img.shields.io/github/issues/Blankj/AndroidUtilCode.svg)](https://github.com/Blankj/AndroidUtilCode/issues) | [![](https://img.shields.io/github/issues/permissions-dispatcher/PermissionsDispatcher.svg)](https://github.com/permissions-dispatcher/PermissionsDispatcher/issues) | [![](https://img.shields.io/github/issues/tbruyelle/RxPermissions.svg)](https://github.com/tbruyelle/RxPermissions/issues) | [![](https://img.shields.io/github/issues/googlesamples/easypermissions.svg)](https://github.com/googlesamples/easypermissions/issues) | | Framework volume | 85 KB | 127 KB | 97 KB | 500 KB | 99 KB | 28 KB | 48 KB | | Framework Maintenance Status | **In maintenance** | stop maintenance | **In maintenance** | stop maintenance | stop maintenance | stop maintenance | stop maintenance | diff --git a/README.md b/README.md index ce60131..7db543d 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ * 博文地址:[一句代码搞定权限请求,从未如此简单](https://www.jianshu.com/p/c69ff8a445ed) -* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/XXPermissions/releases/download/18.6/XXPermissions.apk) +* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/XXPermissions/releases/download/18.62/XXPermissions.apk) ![](picture/zh/download_demo_apk_qr_code.png) @@ -61,7 +61,7 @@ android { dependencies { // 权限请求框架:https://github.com/getActivity/XXPermissions - implementation 'com.github.getActivity:XXPermissions:18.6' + implementation 'com.github.getActivity:XXPermissions:18.62' } ``` @@ -223,7 +223,7 @@ XXPermissions.setInterceptor(new OnPermissionInterceptor() {}); | 适配细节 | [XXPermissions](https://github.com/getActivity/XXPermissions) | [AndPermission](https://github.com/yanzhenjie/AndPermission) | [PermissionX](https://github.com/guolindev/PermissionX) | [AndroidUtilCode-PermissionUtils](https://github.com/Blankj/AndroidUtilCode) | [PermissionsDispatcher](https://github.com/permissions-dispatcher/PermissionsDispatcher) | [RxPermissions](https://github.com/tbruyelle/RxPermissions) | [EasyPermissions](https://github.com/googlesamples/easypermissions) | | :--------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | :------------: | -| 对应版本 | 18.6 | 2.0.3 | 1.7.1 | 1.31.0 | 4.9.2 | 0.12 | 3.0.0 | +| 对应版本 | 18.62 | 2.0.3 | 1.7.1 | 1.31.0 | 4.9.2 | 0.12 | 3.0.0 | | issues 数 | [![](https://img.shields.io/github/issues/getActivity/XXPermissions.svg)](https://github.com/getActivity/XXPermissions/issues) | [![](https://img.shields.io/github/issues/yanzhenjie/AndPermission.svg)](https://github.com/yanzhenjie/AndPermission/issues) | [![](https://img.shields.io/github/issues/guolindev/PermissionX.svg)](https://github.com/guolindev/PermissionX/issues) | [![](https://img.shields.io/github/issues/Blankj/AndroidUtilCode.svg)](https://github.com/Blankj/AndroidUtilCode/issues) | [![](https://img.shields.io/github/issues/permissions-dispatcher/PermissionsDispatcher.svg)](https://github.com/permissions-dispatcher/PermissionsDispatcher/issues) | [![](https://img.shields.io/github/issues/tbruyelle/RxPermissions.svg)](https://github.com/tbruyelle/RxPermissions/issues) | [![](https://img.shields.io/github/issues/googlesamples/easypermissions.svg)](https://github.com/googlesamples/easypermissions/issues) | | 框架体积 | 85 KB | 127 KB | 97 KB | 500 KB | 99 KB | 28 KB | 48 KB | | 框架维护状态 |**维护中**| 停止维护 | 停止维护 | 停止维护 | 停止维护 | 停止维护 | 停止维护 | diff --git a/app/build.gradle b/app/build.gradle index a77f3ec..d3430bf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -7,8 +7,8 @@ android { applicationId "com.hjq.permissions.demo" minSdkVersion 16 targetSdkVersion 34 - versionCode 1806 - versionName "18.6" + versionCode 1862 + versionName "18.62" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } diff --git a/library/build.gradle b/library/build.gradle index 13a03c1..7097a95 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -5,8 +5,8 @@ android { defaultConfig { minSdkVersion 14 - versionCode 1806 - versionName "18.6" + versionCode 1862 + versionName "18.62" } // 使用 JDK 1.8 diff --git a/library/src/main/java/com/hjq/permissions/PermissionChecker.java b/library/src/main/java/com/hjq/permissions/PermissionChecker.java index f0cf60a..ecaae22 100644 --- a/library/src/main/java/com/hjq/permissions/PermissionChecker.java +++ b/library/src/main/java/com/hjq/permissions/PermissionChecker.java @@ -121,6 +121,7 @@ static void checkMediaLocationPermission(@NonNull Context context, @NonNull List for (String permission : requestPermissions) { if (PermissionUtils.equalsPermission(permission, Permission.ACCESS_MEDIA_LOCATION) || PermissionUtils.equalsPermission(permission, Permission.READ_MEDIA_IMAGES) + || PermissionUtils.equalsPermission(permission, Permission.READ_MEDIA_VIDEO) || PermissionUtils.equalsPermission(permission, Permission.READ_EXTERNAL_STORAGE) || PermissionUtils.equalsPermission(permission, Permission.WRITE_EXTERNAL_STORAGE) || PermissionUtils.equalsPermission(permission, Permission.MANAGE_EXTERNAL_STORAGE)) { @@ -134,9 +135,10 @@ static void checkMediaLocationPermission(@NonNull Context context, @NonNull List if (AndroidVersion.getTargetSdkVersionCode(context) >= AndroidVersion.ANDROID_13) { if (!PermissionUtils.containsPermission(requestPermissions, Permission.READ_MEDIA_IMAGES) && + !PermissionUtils.containsPermission(requestPermissions, Permission.READ_MEDIA_VIDEO) && !PermissionUtils.containsPermission(requestPermissions, Permission.MANAGE_EXTERNAL_STORAGE)) { - // 你需要在外层手动添加 READ_MEDIA_IMAGES 或者 MANAGE_EXTERNAL_STORAGE 才可以申请 ACCESS_MEDIA_LOCATION 权限 - throw new IllegalArgumentException("You must add " + Permission.READ_MEDIA_IMAGES + " or " + + // 你需要在外层手动添加 READ_MEDIA_IMAGES、READ_MEDIA_VIDEO、MANAGE_EXTERNAL_STORAGE 任一权限才可以申请 ACCESS_MEDIA_LOCATION 权限 + throw new IllegalArgumentException("You must add " + Permission.READ_MEDIA_IMAGES + " or " + Permission.READ_MEDIA_VIDEO + " or " + Permission.MANAGE_EXTERNAL_STORAGE + " rights to apply for " + Permission.ACCESS_MEDIA_LOCATION + " rights"); } } else { @@ -173,13 +175,39 @@ static void checkStoragePermission(@NonNull Context context, @NonNull List requestPermission // 如果本次申请包含了 Android 11 存储权限 if (PermissionUtils.containsPermission(requestPermissions, Permission.MANAGE_EXTERNAL_STORAGE)) { - if (PermissionUtils.containsPermission(requestPermissions, Permission.READ_EXTERNAL_STORAGE) || - PermissionUtils.containsPermission(requestPermissions, Permission.WRITE_EXTERNAL_STORAGE)) { - // 检测是否有旧版的存储权限,有的话直接抛出异常,请不要自己动态申请这两个权限 - // 框架会在 Android 10 以下的版本上自动添加并申请这两个权限 - throw new IllegalArgumentException("If you have applied for MANAGE_EXTERNAL_STORAGE permissions, " + - "do not apply for the READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE permissions"); - } - if (!AndroidVersion.isAndroid11()) { // 自动添加旧版的存储权限,因为旧版的系统不支持申请新版的存储权限 - requestPermissions.add(Permission.READ_EXTERNAL_STORAGE); - requestPermissions.add(Permission.WRITE_EXTERNAL_STORAGE); + if (!PermissionUtils.containsPermission(requestPermissions, Permission.READ_EXTERNAL_STORAGE)) { + requestPermissions.add(Permission.READ_EXTERNAL_STORAGE); + } + + if (!PermissionUtils.containsPermission(requestPermissions, Permission.WRITE_EXTERNAL_STORAGE)) { + requestPermissions.add(Permission.WRITE_EXTERNAL_STORAGE); + } } } diff --git a/library/src/main/java/com/hjq/permissions/PermissionDelegateImplV14.java b/library/src/main/java/com/hjq/permissions/PermissionDelegateImplV14.java index 790dcd4..8854e9e 100644 --- a/library/src/main/java/com/hjq/permissions/PermissionDelegateImplV14.java +++ b/library/src/main/java/com/hjq/permissions/PermissionDelegateImplV14.java @@ -6,6 +6,7 @@ import android.net.VpnService; import android.support.annotation.NonNull; import android.support.annotation.RequiresApi; +import java.util.Collections; /** * author : Android 轮子哥 @@ -37,7 +38,7 @@ public Intent getPermissionIntent(@NonNull Context context, @NonNull String perm return getVpnPermissionIntent(context); } - return PermissionIntentManager.getApplicationDetailsIntent(context); + return PermissionIntentManager.getApplicationDetailsIntent(context, Collections.singletonList(permission)); } /** diff --git a/library/src/main/java/com/hjq/permissions/PermissionIntentManager.java b/library/src/main/java/com/hjq/permissions/PermissionIntentManager.java index ca9fedc..670c8fc 100644 --- a/library/src/main/java/com/hjq/permissions/PermissionIntentManager.java +++ b/library/src/main/java/com/hjq/permissions/PermissionIntentManager.java @@ -6,6 +6,8 @@ import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; /** * author : Android 轮子哥 @@ -276,13 +278,28 @@ static Intent getVivoMobileManagerAppIntent(Context context) { /* ---------------------------------------------------------------------------------------- */ + @NonNull + static Intent getApplicationDetailsIntent(@NonNull Context context) { + return getApplicationDetailsIntent(context, null); + } + /** * 获取应用详情界面意图 */ @NonNull - static Intent getApplicationDetailsIntent(@NonNull Context context) { + static Intent getApplicationDetailsIntent(@NonNull Context context, @Nullable List permissions) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.setData(PermissionUtils.getPackageNameUri(context)); + if (permissions != null && !permissions.isEmpty() && PhoneRomUtils.isColorOs()) { + // OPPO 应用权限受阻跳转优化适配:https://open.oppomobile.com/new/developmentDoc/info?id=12983 + Bundle bundle = new Bundle(); + // 元素为受阻权限的原生权限名字符串常量 + bundle.putStringArrayList("permissionList", permissions instanceof ArrayList ? + (ArrayList) permissions : new ArrayList<>(permissions)); + intent.putExtras(bundle); + // 传入跳转优化标识 + intent.putExtra("isGetPermission", true); + } if (PermissionUtils.areActivityIntent(context, intent)) { return intent; } diff --git a/library/src/main/java/com/hjq/permissions/PermissionUtils.java b/library/src/main/java/com/hjq/permissions/PermissionUtils.java index 9f62bd5..a216c4e 100644 --- a/library/src/main/java/com/hjq/permissions/PermissionUtils.java +++ b/library/src/main/java/com/hjq/permissions/PermissionUtils.java @@ -445,7 +445,7 @@ static Intent getSmartPermissionIntent(@NonNull Context context, @Nullable List< if (permissions.size() == 1) { return PermissionApi.getPermissionIntent(context, permissions.get(0)); } - return PermissionIntentManager.getApplicationDetailsIntent(context); + return PermissionIntentManager.getApplicationDetailsIntent(context, permissions); } // 特殊权限统一处理