Explorar o código

提交1.1.6版本,修改方法,去除多余方法及多余配置项,添加默认dialog配置,优化跳转设置页设置权限后返回权限请求结果无反应,适配android10所有文件访问权限

kth@mac %!s(int64=2) %!d(string=hai) anos
pai
achega
3fba289dbf

+ 2 - 2
README.md

@@ -17,7 +17,7 @@ repositories {
 ### module 下添加
 
 ~~~
-implementation 'com.yanyi.benyanyi:PermissionHelper:1.1.5-1'
+implementation 'com.yanyi.benyanyi:PermissionHelper:1.1.6'
 ~~~
 
 ### 使用
@@ -49,7 +49,7 @@ implementation 'com.yanyi.benyanyi:PermissionHelper:1.1.5-1'
 
 ### 版本更新
 
-* 2022-08-31更新(1.1.5-1) 修改方法,去除多余方法及多余配置项,添加默认dialog配置,优化跳转设置页设置权限后返回权限请求结果无反应
+* 2022-08-31更新(1.1.6) 修改方法,去除多余方法及多余配置项,添加默认dialog配置,优化跳转设置页设置权限后返回权限请求结果无反应,适配android30所有文件访问权限
 * 2021-08-27更新(1.1.4) 删除kotlin版本,升级gradle版本,修改maven地址
 * 2021-03-23更新(1.1.3) 添加kotlin版1.1.3版本
 * 2021-03-12更新(1.1.3) 修复不同页面调用权限请求时,activity为空报错

+ 7 - 1
app/src/main/AndroidManifest.xml

@@ -1,4 +1,5 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
     package="com.yanyi.basepermission">
 
     <!--拨打电话权限--><!--PHONE-->
@@ -10,6 +11,10 @@
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
+
     <application
         android:allowBackup="true"
         android:icon="@mipmap/ic_launcher"
@@ -17,7 +22,8 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name=".MainActivity"
+        <activity
+            android:name=".MainActivity"
             android:exported="true">
             <intent-filter>
                 <category android:name="android.intent.category.LAUNCHER" />

+ 4 - 2
app/src/main/java/com/yanyi/basepermission/MainActivity.java

@@ -11,7 +11,7 @@ import android.util.Log;
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.benyanyi.permissionlib.PermissionCallBack;
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
 import com.benyanyi.permissionlib.PermissionHelper;
 
 /**
@@ -30,7 +30,9 @@ public class MainActivity extends AppCompatActivity {
                 .setPermissions(Manifest.permission.READ_PHONE_STATE,
                         Manifest.permission.CALL_PHONE,
                         Manifest.permission.ACCESS_COARSE_LOCATION,
-                        Manifest.permission.ACCESS_FINE_LOCATION)
+                        Manifest.permission.ACCESS_FINE_LOCATION,
+                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                        Manifest.permission.MANAGE_EXTERNAL_STORAGE)
                 .setDefaultPermissionDialogInfo()
                 .request(new PermissionCallBack() {
                     @Override

+ 2 - 0
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionBind.java

@@ -7,6 +7,8 @@ import com.benyanyi.permissionlib.annotation.GetPermissionDialogInfo;
 import com.benyanyi.permissionlib.annotation.GetPermissionFailure;
 import com.benyanyi.permissionlib.annotation.GetPermissionSuccess;
 import com.benyanyi.permissionlib.annotation.GetPermissions;
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+import com.benyanyi.permissionlib.dialog.PermissionDialogInfo;
 
 import java.lang.reflect.Method;
 

+ 3 - 0
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionConfig.java

@@ -1,5 +1,8 @@
 package com.benyanyi.permissionlib;
 
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+import com.benyanyi.permissionlib.dialog.PermissionDialogInfo;
+
 /**
  * @author YanYi
  * @date 2019/5/24 11:47

+ 0 - 18
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDialogOnClick.java

@@ -1,18 +0,0 @@
-package com.benyanyi.permissionlib;
-
-import android.content.DialogInterface;
-
-/**
- * @author YanYi
- * @date 2019/5/24 14:20
- * @email ben@yanyi.red
- * @overview
- */
-interface PermissionDialogOnClick {
-    /**
-     * 点击
-     *
-     * @param failurePermissions
-     */
-    void onClick(DialogInterface dialog, String[] failurePermissions);
-}

+ 109 - 18
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionFragment.java

@@ -1,5 +1,6 @@
 package com.benyanyi.permissionlib;
 
+import android.Manifest;
 import android.annotation.TargetApi;
 import android.app.AlertDialog;
 import android.app.Fragment;
@@ -8,6 +9,8 @@ import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Environment;
+import android.provider.Settings;
 import android.text.TextUtils;
 
 import androidx.annotation.NonNull;
@@ -15,6 +18,9 @@ import androidx.annotation.Nullable;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+import com.benyanyi.permissionlib.dialog.PermissionDialogInfo;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -31,10 +37,12 @@ public final class PermissionFragment extends Fragment {
     private final int code2 = 0x32;
     private int permissionCode = 0x30;
     private boolean isStop = false;
+    private boolean isShow = false;
 
     private List<String> oList = new ArrayList<>();
 
     private String[] permissions;
+    private String[] permissions2;
     private PermissionCallBack callBack;
 
     @Override
@@ -44,24 +52,64 @@ public final class PermissionFragment extends Fragment {
         this.isStop = false;
     }
 
+    /**
+     * 设置权限
+     */
     void setPermissions(String[] permissions) {
-        this.permissions = permissions;
+        List<String> list1 = new ArrayList<>();
+        List<String> list2 = new ArrayList<>();
+        for (String permission : permissions) {
+            if (permission.equalsIgnoreCase(Manifest.permission.MANAGE_EXTERNAL_STORAGE)) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+                    list2.add(permission);
+                }
+            } else {
+                list1.add(permission);
+            }
+        }
+        this.permissions = list1.toArray(new String[0]);
+        this.permissions2 = list2.toArray(new String[0]);
     }
 
+    /**
+     * 设置弹窗
+     */
     void setInfo(PermissionDialogInfo info) {
         this.info = info;
+        if (this.info != null && this.info.isShow) {
+            this.isShow = true;
+        }
     }
 
+    /**
+     * 设置回调
+     */
     void setCallBack(PermissionCallBack callBack) {
         this.callBack = callBack;
     }
 
+    /**
+     * 开始请求权限
+     */
     void startForPermissionResult() {
         if (checkPermission()) {
-            if (this.callBack != null) {
-                this.callBack.onPermissionSuccess();
-                this.callBack.onPermissionComplete();
-                PermissionHelper.removeFragment();
+            if (permissions2 != null && permissions2.length <= 0) {
+                if (this.callBack != null) {
+                    this.callBack.onPermissionSuccess();
+                    this.callBack.onPermissionComplete();
+                    PermissionHelper.removeFragment();
+                }
+            } else {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
+                    Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
+                    startActivity(intent);
+                } else {
+                    if (this.callBack != null) {
+                        this.callBack.onPermissionSuccess();
+                        this.callBack.onPermissionComplete();
+                        PermissionHelper.removeFragment();
+                    }
+                }
             }
         } else {
             requestPermission(code1);
@@ -98,6 +146,9 @@ public final class PermissionFragment extends Fragment {
         return oList.isEmpty();
     }
 
+    /**
+     * 请求权限
+     */
     @TargetApi(Build.VERSION_CODES.M)
     private void requestPermission(int code) {
         requestPermissions(permissions, code);
@@ -130,10 +181,10 @@ public final class PermissionFragment extends Fragment {
         builder.setPositiveButton(positiveText, new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
                 if (positiveClick != null) {
-                    positiveClick.onClick(dialog, PermissionFragment.this.oList.toArray(new String[0]));
+                    positiveClick.onClick(callBack, PermissionFragment.this.oList.toArray(new String[0]));
                 } else {
-                    dialog.dismiss();
                     requestPermission(code2);
                 }
             }
@@ -141,10 +192,10 @@ public final class PermissionFragment extends Fragment {
         builder.setNegativeButton(negativeText, new DialogInterface.OnClickListener() {
             @Override
             public void onClick(DialogInterface dialog, int which) {
+                dialog.dismiss();
                 if (negativeClick != null) {
-                    negativeClick.onClick(dialog, PermissionFragment.this.oList.toArray(new String[0]));
+                    negativeClick.onClick(callBack, PermissionFragment.this.oList.toArray(new String[0]));
                 } else {
-                    dialog.dismiss();
                     if (callBack != null) {
                         callBack.onPermissionFailure(PermissionFragment.this.oList.toArray(new String[0]));
                         callBack.onPermissionComplete();
@@ -158,19 +209,41 @@ public final class PermissionFragment extends Fragment {
         } else {
             setFailure();
         }
+        this.isShow = false;
     }
 
+    /**
+     * 权限请求后回调
+     */
     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
         List<String> list = hasAllPermissionsGranted(permissions, grantResults);
         boolean boo = list.isEmpty() && (this.code1 == requestCode || this.code2 == requestCode);
         if (boo) {
-            if (this.callBack != null) {
-                this.callBack.onPermissionSuccess();
-                this.callBack.onPermissionComplete();
-                PermissionHelper.removeFragment();
+            if (this.permissions2 != null && this.permissions2.length > 0) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
+                    Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
+                    startActivity(intent);
+                } else {
+                    if (this.callBack != null) {
+                        this.callBack.onPermissionSuccess();
+                        this.callBack.onPermissionComplete();
+                        PermissionHelper.removeFragment();
+                    }
+                }
+            } else {
+                if (this.callBack != null) {
+                    this.callBack.onPermissionSuccess();
+                    this.callBack.onPermissionComplete();
+                    PermissionHelper.removeFragment();
+                }
             }
+        } else if (this.permissions2 != null && this.permissions2.length > 0
+                && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R
+                && !Environment.isExternalStorageManager()) {
+            Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
+            startActivity(intent);
         } else {
             oList = list;
             if (this.code1 == requestCode) {
@@ -205,13 +278,31 @@ public final class PermissionFragment extends Fragment {
         super.onResume();
         if (this.isStop) {
             if (checkPermission()) {
-                if (this.callBack != null) {
-                    this.callBack.onPermissionSuccess();
-                    this.callBack.onPermissionComplete();
-                    PermissionHelper.removeFragment();
+                if (this.permissions2 != null && this.permissions2.length > 0) {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Environment.isExternalStorageManager()) {
+                        if (this.callBack != null) {
+                            this.callBack.onPermissionFailure(this.permissions2);
+                            this.callBack.onPermissionComplete();
+                            PermissionHelper.removeFragment();
+                        }
+                    } else {
+                        if (this.callBack != null) {
+                            this.callBack.onPermissionSuccess();
+                            this.callBack.onPermissionComplete();
+                            PermissionHelper.removeFragment();
+                        }
+                    }
+                } else {
+                    if (this.callBack != null) {
+                        this.callBack.onPermissionSuccess();
+                        this.callBack.onPermissionComplete();
+                        PermissionHelper.removeFragment();
+                    }
                 }
             } else {
-                if (this.callBack != null) {
+                if (this.isShow) {
+                    showDialog();
+                } else if (this.callBack != null) {
                     this.callBack.onPermissionFailure(this.oList.toArray(new String[0]));
                     this.callBack.onPermissionComplete();
                     PermissionHelper.removeFragment();

+ 5 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionHelper.java

@@ -4,6 +4,10 @@ import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
 
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+import com.benyanyi.permissionlib.dialog.PermissionDefaultDialogInfo;
+import com.benyanyi.permissionlib.dialog.PermissionDialogInfo;
+
 /**
  * @author YanYi
  * @date 2018-06-06 10:40
@@ -13,7 +17,7 @@ import android.app.FragmentManager;
 public class PermissionHelper implements PermissionConfig {
     private static PermissionConfig instance;
     private static Activity mActivity;
-    private static String tag = "PermissionHelper";
+    private static final String tag = "PermissionHelper";
     private final PermissionFragment permissionFragment;
 
     private PermissionHelper() {

+ 1 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionCallBack.java → permissionlib/src/main/java/com/benyanyi/permissionlib/callback/PermissionCallBack.java

@@ -1,4 +1,4 @@
-package com.benyanyi.permissionlib;
+package com.benyanyi.permissionlib.callback;
 
 /**
  * @author YanYi

+ 9 - 6
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDefaultDialogInfo.java → permissionlib/src/main/java/com/benyanyi/permissionlib/dialog/PermissionDefaultDialogInfo.java

@@ -1,12 +1,13 @@
-package com.benyanyi.permissionlib;
+package com.benyanyi.permissionlib.dialog;
 
 import android.app.Activity;
 import android.content.ComponentName;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.Uri;
 import android.os.Build;
 
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+
 import java.util.Locale;
 
 /**
@@ -27,14 +28,17 @@ public class PermissionDefaultDialogInfo {
         permissionDialogInfo.negativeText = "取消";
         permissionDialogInfo.negativeClick = new PermissionDialogInfo.NegativeClick() {
             @Override
-            public void onClick(DialogInterface dialog, String[] failurePermissions) {
-                dialog.dismiss();
+            public void onClick(PermissionCallBack callBack, String[] failurePermissions) {
+                if (callBack != null) {
+                    callBack.onPermissionFailure(failurePermissions);
+                    callBack.onPermissionComplete();
+                }
             }
         };
         permissionDialogInfo.positiveText = "跳转设置权限";
         permissionDialogInfo.positiveClick = new PermissionDialogInfo.PositiveClick() {
             @Override
-            public void onClick(DialogInterface dialog, String[] failurePermissions) {
+            public void onClick(PermissionCallBack callBack, String[] failurePermissions) {
                 if ("redmi".equalsIgnoreCase(brand) || "xiaomi".equalsIgnoreCase(brand.toLowerCase(Locale.ROOT))) {
                     gotoXMPermission(activity);
                 } else if ("meizu".equalsIgnoreCase(brand)) {
@@ -44,7 +48,6 @@ public class PermissionDefaultDialogInfo {
                 } else {
                     activity.startActivity(getAppDetailSettingIntent(activity));
                 }
-                dialog.dismiss();
             }
         };
         return permissionDialogInfo;

+ 4 - 4
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDialogInfo.java → permissionlib/src/main/java/com/benyanyi/permissionlib/dialog/PermissionDialogInfo.java

@@ -1,6 +1,6 @@
-package com.benyanyi.permissionlib;
+package com.benyanyi.permissionlib.dialog;
 
-import android.content.DialogInterface;
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
 
 /**
  * @author myLove
@@ -26,7 +26,7 @@ public final class PermissionDialogInfo {
          * @param failurePermissions
          */
         @Override
-        void onClick(DialogInterface dialog, String[] failurePermissions);
+        void onClick(PermissionCallBack callBack, String[] failurePermissions);
     }
 
     public interface NegativeClick extends PermissionDialogOnClick {
@@ -36,7 +36,7 @@ public final class PermissionDialogInfo {
          * @param failurePermissions
          */
         @Override
-        void onClick(DialogInterface dialog, String[] failurePermissions);
+        void onClick(PermissionCallBack callBack, String[] failurePermissions);
     }
 
 }

+ 19 - 0
permissionlib/src/main/java/com/benyanyi/permissionlib/dialog/PermissionDialogOnClick.java

@@ -0,0 +1,19 @@
+package com.benyanyi.permissionlib.dialog;
+
+import com.benyanyi.permissionlib.callback.PermissionCallBack;
+
+/**
+ * @author YanYi
+ * @date 2019/5/24 14:20
+ * @email ben@yanyi.red
+ * @overview
+ */
+interface PermissionDialogOnClick {
+    /**
+     * 点击
+     *
+     * @param callBack           回调
+     * @param failurePermissions 失败的权限
+     */
+    void onClick(PermissionCallBack callBack, String[] failurePermissions);
+}

+ 0 - 40
permissionlib/src/main/java/com/benyanyi/permissionlib/msg/FailureMsg.java

@@ -1,40 +0,0 @@
-package com.benyanyi.permissionlib.msg;
-
-import java.util.Arrays;
-
-/**
- * @author YanYi
- * @date 2019/5/29 16:56
- * @email ben@yanyi.red
- * @overview
- */
-public class FailureMsg {
-
-    private int permissionCode;
-
-    private String[] failurePermissions;
-
-    public int getPermissionCode() {
-        return permissionCode;
-    }
-
-    public void setPermissionCode(int permissionCode) {
-        this.permissionCode = permissionCode;
-    }
-
-    public String[] getFailurePermissions() {
-        return failurePermissions;
-    }
-
-    public void setFailurePermissions(String[] failurePermissions) {
-        this.failurePermissions = failurePermissions;
-    }
-
-    @Override
-    public String toString() {
-        return "FailureMsg{" +
-                "permissionCode=" + permissionCode +
-                ", failurePermissions=" + Arrays.toString(failurePermissions) +
-                '}';
-    }
-}

+ 1 - 1
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionType.java → permissionlib/src/main/java/com/benyanyi/permissionlib/type/PermissionType.java

@@ -1,4 +1,4 @@
-package com.benyanyi.permissionlib;
+package com.benyanyi.permissionlib.type;
 
 import android.Manifest;