فهرست منبع

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

kth@mac 2 سال پیش
والد
کامیت
1fff55dcba

+ 33 - 2
README.md

@@ -1,9 +1,11 @@
 # BasePermission
+
 权限工具类
 
 ## 使用方法
 
 ### 根目录下build.gradle添加Maven地址
+
 ~~~
 repositories {
         maven {
@@ -11,14 +13,43 @@ repositories {
         }
     }
 ~~~
+
 ### module 下添加
 
 ~~~
-//java版本
-implementation 'com.yanyi.benyanyi:PermissionHelper:1.1.4'
+implementation 'com.yanyi.benyanyi:PermissionHelper:1.1.5'
+~~~
+
+### 使用
+
+~~~
+        PermissionHelper.with(this)
+                .setPermissions(Manifest.permission.READ_PHONE_STATE,
+                        Manifest.permission.CALL_PHONE,
+                        Manifest.permission.ACCESS_COARSE_LOCATION,
+                        Manifest.permission.ACCESS_FINE_LOCATION)
+                .setDefaultPermissionDialogInfo()
+                .request(new PermissionCallBack() {
+                    @Override
+                    public void onPermissionSuccess() {
+                        log("所有权限请求成功");
+                    }
+
+                    @Override
+                    public void onPermissionFailure(String[] failurePermissions) {
+                        log("部分权限请求失败");
+                    }
+
+                    @Override
+                    public void onPermissionComplete() {
+                        log("请求结束");
+                    }
+                });
 ~~~
 
 ### 版本更新
+
+* 2022-08-28更新(1.1.5) 修改方法,去除多余方法及多余配置项,添加默认dialog配置,优化跳转设置页设置权限后返回权限请求结果无反应
 * 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为空报错

+ 6 - 3
app/build.gradle

@@ -1,11 +1,11 @@
 apply plugin: 'com.android.application'
 
 android {
-    compileSdkVersion 29
+    compileSdkVersion 32
     defaultConfig {
         applicationId "com.yanyi.basepermission"
         minSdkVersion 15
-        targetSdkVersion 29
+        targetSdkVersion 32
         versionCode 1
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -30,6 +30,9 @@ dependencies {
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
 
     implementation 'androidx.core:core-ktx:1.3.2'
-//    implementation project(':permissionlib')
+    implementation project(':permissionlib')
 //    implementation('com.yanyi.benyanyi:PermissionHelper-kt:1.1.3')
 }
+repositories {
+    mavenCentral()
+}

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

@@ -17,7 +17,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" />
                 <action android:name="android.intent.action.MAIN" />

+ 35 - 17
app/src/main/java/com/yanyi/basepermission/MainActivity.java

@@ -1,13 +1,18 @@
 package com.yanyi.basepermission;
 
 import android.Manifest;
+import android.app.Activity;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Build;
 import android.os.Bundle;
 import android.util.Log;
 
 import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.benyanyi.permission.kt.PermissionHelper;
+import com.benyanyi.permissionlib.PermissionCallBack;
+import com.benyanyi.permissionlib.PermissionHelper;
 
 /**
  * @author myLove
@@ -21,29 +26,29 @@ public class MainActivity extends AppCompatActivity {
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.act_main);
-        PermissionHelper.Companion.getInstance(this)
+        PermissionHelper.with(this)
                 .setPermissions(Manifest.permission.READ_PHONE_STATE,
                         Manifest.permission.CALL_PHONE,
                         Manifest.permission.ACCESS_COARSE_LOCATION,
                         Manifest.permission.ACCESS_FINE_LOCATION)
                 .setDefaultPermissionDialogInfo()
-                .request()
-                .onPermissionSuccess(() -> {
-                    log("请求成功");
-                    return null;
-                })
-                .onPermissionFailure(strings -> {
-                    StringBuilder str = new StringBuilder();
-                    for (String s : strings) {
-                        str.append("\n").append(s);
+                .request(new PermissionCallBack() {
+                    @Override
+                    public void onPermissionSuccess() {
+                        log("请求成功");
+                    }
+
+                    @Override
+                    public void onPermissionFailure(String[] failurePermissions) {
+                        log("请求失败");
+                    }
+
+                    @Override
+                    public void onPermissionComplete() {
+                        log("请求结束");
                     }
-                    log(str.toString());
-                    return null;
-                })
-                .onPermissionComplete(() -> {
-                    log("请求完成");
-                    return null;
                 });
+
 //                .onPermissionSuccess(() -> log("请求成功"))
 //                .onPermissionFailure(strings -> {
 //                    StringBuilder str = new StringBuilder();
@@ -55,6 +60,19 @@ public class MainActivity extends AppCompatActivity {
 //                .onPermissionComplete(() -> log("请求完成"));
     }
 
+    private Intent getAppDetailSettingIntent(Activity activity) {
+        Intent localIntent = new Intent();
+        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
+            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
+            localIntent.setData(Uri.fromParts("package", activity.getApplicationContext().getPackageName(), null));
+        } else {
+            localIntent.setAction(Intent.ACTION_VIEW);
+            localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
+            localIntent.putExtra("com.android.settings.ApplicationPkgName", activity.getApplicationContext().getPackageName());
+        }
+        return localIntent;
+    }
 
     private void log(Object object) {
         Log.d(defaultTag(), object.toString());

+ 22 - 9
permissionlib/build.gradle

@@ -1,13 +1,12 @@
 apply plugin: 'com.android.library'
 
 android {
-    compileSdkVersion 29
-
+    compileSdkVersion 32
 
 
     defaultConfig {
         minSdkVersion 14
-        targetSdkVersion 29
+        targetSdkVersion 32
         versionCode 1
         versionName "1.0"
 
@@ -21,15 +20,29 @@ android {
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
         }
     }
-
+    packagingOptions {
+        // 剔除这个包下的所有文件(不会移除签名信息)
+        exclude 'META-INF/*******'
+    }
 }
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
 
-    implementation 'androidx.appcompat:appcompat:1.2.0'
-    testImplementation 'junit:junit:4.12'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+    implementation 'androidx.appcompat:appcompat:1.4.1'
+    testImplementation 'junit:junit:4.13.2'
+    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+    implementation "androidx.core:core-ktx:1.7.0"
+}
+afterEvaluate {
+    // 排除 BuildConfig.class 和 R.class
+    generateReleaseBuildConfig.enabled = false
+    generateDebugBuildConfig.enabled = false
+    generateReleaseResValues.enabled = false
+    generateDebugResValues.enabled = false
 }
-apply from: 'bintrayUpload.gradle'
+apply from: 'bintrayUpload.gradle'
+repositories {
+    mavenCentral()
+}

+ 8 - 14
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionBind.java

@@ -7,7 +7,6 @@ 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.msg.FailureMsg;
 
 import java.lang.reflect.Method;
 
@@ -24,7 +23,7 @@ public final class PermissionBind {
 
     private PermissionBind(Activity activity, Object object) {
         this.object = object;
-        this.permissionConfig = PermissionHelper.getInstance(activity);
+        this.permissionConfig = PermissionHelper.with(activity);
         initPermission();
     }
 
@@ -49,7 +48,6 @@ public final class PermissionBind {
                 this.setPermissions(value);
                 this.setPermissionDialogInfo(annotationDialogInfo());
                 this.annotationCallBack();
-                this.hasPermission();
             }
         }
     }
@@ -93,19 +91,19 @@ public final class PermissionBind {
      * 权限申请结果回调注解处理
      */
     private void annotationCallBack() {
-        this.setPermissionCallBack(new PermissionCallBack() {
+        this.request(new PermissionCallBack() {
             @Override
-            public void onPermissionSuccess(int permissionCode) {
+            public void onPermissionSuccess() {
                 annotationSuccess();
             }
 
             @Override
-            public void onPermissionFailure(FailureMsg failureMsg) {
-                annotationFailure(failureMsg.getFailurePermissions());
+            public void onPermissionFailure(String[] failurePermissions) {
+                annotationFailure(failurePermissions);
             }
 
             @Override
-            public void onPermissionComplete(int permissionCode) {
+            public void onPermissionComplete() {
                 annotationComplete();
             }
         });
@@ -180,12 +178,8 @@ public final class PermissionBind {
         this.permissionConfig.setPermissionDialogInfo(info);
     }
 
-    private void setPermissionCallBack(PermissionCallBack callBack) {
-        this.permissionConfig.setPermissionCallBack(callBack);
-    }
-
-    private void hasPermission() {
-        this.permissionConfig.hasPermission(0x100);
+    private void request(PermissionCallBack callBack) {
+        this.permissionConfig.request(callBack);
     }
 
     public PermissionConfig getPermissionConfig() {

+ 5 - 9
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionCallBack.java

@@ -1,7 +1,5 @@
 package com.benyanyi.permissionlib;
 
-import com.benyanyi.permissionlib.msg.FailureMsg;
-
 /**
  * @author YanYi
  * @date 2019/5/23 09:48
@@ -11,20 +9,18 @@ import com.benyanyi.permissionlib.msg.FailureMsg;
 public interface PermissionCallBack {
     /**
      * 拥有所有权限
-     * @param permissionCode
      */
-    void onPermissionSuccess(int permissionCode);
+    void onPermissionSuccess();
 
     /**
      * 没有拥有所有权限
-     * @param failureMsg
+     *
+     * @param failurePermissions 未获取到的权限
      */
-    void onPermissionFailure(FailureMsg failureMsg);
+    void onPermissionFailure(String[] failurePermissions);
 
     /**
      * 申请权限后执行该操作,不管有没有获取到所有权限
-     *
-     * @param permissionCode
      */
-    void onPermissionComplete(int permissionCode);
+    void onPermissionComplete();
 }

+ 4 - 35
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionConfig.java

@@ -24,48 +24,17 @@ public interface PermissionConfig {
     PermissionConfig setPermissionDialogInfo(PermissionDialogInfo info);
 
     /**
-     * 权限获取回调
+     * 使用默认dialog
      *
-     * @param permissionCallBack
-     */
-    PermissionConfig setPermissionCallBack(PermissionCallBack permissionCallBack);
-
-    /**
-     * 判断权限是否需要请求
+     * @return
      */
-    void hasPermission(int permissionCode);
+    PermissionConfig setDefaultPermissionDialogInfo();
 
     /**
      * 判断权限是否需要请求
      *
      * @param callBack 回调
      */
-    void hasPermission(int permissionCode, PermissionCallBack callBack);
-
-    /**
-     * 判断权限是否需要请求
-     *
-     * @param callBack    回调
-     * @param permissions 权限
-     */
-    void hasPermission(int permissionCode, PermissionCallBack callBack, String... permissions);
-
-    /**
-     * 判断权限是否需要请求
-     *
-     * @param info        弹窗配置
-     * @param callBack    回调
-     * @param permissions 权限
-     */
-    void hasPermission(int permissionCode, PermissionDialogInfo info, String... permissions);
-
-    /**
-     * 判断权限是否需要请求
-     *
-     * @param info        弹窗配置
-     * @param callBack    回调
-     * @param permissions 权限
-     */
-    void hasPermission(int permissionCode, PermissionDialogInfo info, PermissionCallBack callBack, String... permissions);
+    void request(PermissionCallBack callBack);
 
 }

+ 125 - 0
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionDefaultDialogInfo.java

@@ -0,0 +1,125 @@
+package com.benyanyi.permissionlib;
+
+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 java.util.Locale;
+
+/**
+ * @author YanYi
+ * @date 2022/8/31 2:05 下午
+ * @email ben@yanyi.red
+ * @overview
+ */
+public class PermissionDefaultDialogInfo {
+
+    public static PermissionDialogInfo getInfo(final Activity activity) {
+        //手机厂商
+        final String brand = Build.BRAND;
+        PermissionDialogInfo permissionDialogInfo = new PermissionDialogInfo();
+        permissionDialogInfo.isShow = true;
+        permissionDialogInfo.message = "权限不足,功能无法正常使用";
+        permissionDialogInfo.title = "权限不足";
+        permissionDialogInfo.negativeText = "取消";
+        permissionDialogInfo.negativeClick = new PermissionDialogInfo.NegativeClick() {
+            @Override
+            public void onClick(DialogInterface dialog, String[] failurePermissions) {
+                dialog.dismiss();
+            }
+        };
+        permissionDialogInfo.positiveText = "跳转设置权限";
+        permissionDialogInfo.positiveClick = new PermissionDialogInfo.PositiveClick() {
+            @Override
+            public void onClick(DialogInterface dialog, String[] failurePermissions) {
+                if ("redmi".equalsIgnoreCase(brand) || "xiaomi".equalsIgnoreCase(brand.toLowerCase(Locale.ROOT))) {
+                    gotoXMPermission(activity);
+                } else if ("meizu".equalsIgnoreCase(brand)) {
+                    gotoMZPermission(activity);
+                } else if ("huawei".equalsIgnoreCase(brand) || "honor".equalsIgnoreCase(brand)) {
+                    gotoHWPermission(activity);
+                } else {
+                    activity.startActivity(getAppDetailSettingIntent(activity));
+                }
+                dialog.dismiss();
+            }
+        };
+        return permissionDialogInfo;
+    }
+
+    /**
+     * 跳转到miui的权限管理页面
+     */
+    private static void gotoXMPermission(Activity activity) {
+        try {
+            Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
+            intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");
+            intent.putExtra("extra_pkgname", activity.getApplicationContext().getPackageName());
+            activity.startActivity(intent);
+        } catch (Exception e) {
+            e.printStackTrace();
+            try {
+                Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR");
+                intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
+                intent.putExtra("extra_pkgname", activity.getApplicationContext().getPackageName());
+                activity.startActivity(intent);
+            } catch (Exception e1) {
+                e.printStackTrace();
+                activity.startActivity(getAppDetailSettingIntent(activity));
+            }
+        }
+    }
+
+    /**
+     * 跳转到魅族的权限管理系统
+     */
+    private static void gotoMZPermission(Activity activity) {
+        try {
+            Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");
+            intent.addCategory(Intent.CATEGORY_DEFAULT);
+            intent.putExtra("packageName", activity.getApplicationContext().getPackageName());
+            activity.startActivity(intent);
+        } catch (Exception e) {
+            e.printStackTrace();
+            activity.startActivity(getAppDetailSettingIntent(activity));
+        }
+    }
+
+    /**
+     * 华为的权限管理页面
+     */
+    private static void gotoHWPermission(Activity activity) {
+        try {
+            Intent intent = new Intent();
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            //华为权限管理
+            ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");
+            intent.setComponent(comp);
+            activity.startActivity(intent);
+        } catch (Exception e) {
+            e.printStackTrace();
+            activity.startActivity(getAppDetailSettingIntent(activity));
+        }
+    }
+
+    /**
+     * 获取应用详情页面intent(如果找不到要跳转的界面,也可以先把用户引导到系统设置页面)
+     */
+    private static Intent getAppDetailSettingIntent(Activity activity) {
+        Intent localIntent = new Intent();
+        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
+            localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
+            localIntent.setData(Uri.fromParts("package", activity.getApplicationContext().getPackageName(), null));
+        } else {
+            localIntent.setAction(Intent.ACTION_VIEW);
+            localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
+            localIntent.putExtra("com.android.settings.ApplicationPkgName", activity.getApplicationContext().getPackageName());
+        }
+        return localIntent;
+    }
+
+}

+ 47 - 23
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionFragment.java

@@ -15,8 +15,6 @@ import androidx.annotation.Nullable;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 
-import com.benyanyi.permissionlib.msg.FailureMsg;
-
 import java.util.ArrayList;
 import java.util.List;
 
@@ -29,10 +27,10 @@ import java.util.List;
 public final class PermissionFragment extends Fragment {
 
     private PermissionDialogInfo info;
-    private int code1 = 0x101;
-    private int code2 = 0x102;
-    private int requestCode = 0x103;
-    private int permissionCode;
+    private final int code1 = 0x31;
+    private final int code2 = 0x32;
+    private int permissionCode = 0x30;
+    private boolean isStop = false;
 
     private List<String> oList = new ArrayList<>();
 
@@ -43,6 +41,7 @@ public final class PermissionFragment extends Fragment {
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setRetainInstance(true);
+        this.isStop = false;
     }
 
     void setPermissions(String[] permissions) {
@@ -57,12 +56,12 @@ public final class PermissionFragment extends Fragment {
         this.callBack = callBack;
     }
 
-    void startForPermissionResult(int permissionCode) {
-        this.permissionCode = permissionCode;
+    void startForPermissionResult() {
         if (checkPermission()) {
             if (this.callBack != null) {
-                this.callBack.onPermissionSuccess(this.permissionCode);
-                this.callBack.onPermissionComplete(this.permissionCode);
+                this.callBack.onPermissionSuccess();
+                this.callBack.onPermissionComplete();
+                PermissionHelper.removeFragment();
             }
         } else {
             requestPermission(code1);
@@ -147,11 +146,9 @@ public final class PermissionFragment extends Fragment {
                 } else {
                     dialog.dismiss();
                     if (callBack != null) {
-                        FailureMsg failureMsg = new FailureMsg();
-                        failureMsg.setFailurePermissions(PermissionFragment.this.oList.toArray(new String[0]));
-                        failureMsg.setPermissionCode(permissionCode);
-                        callBack.onPermissionFailure(failureMsg);
-                        callBack.onPermissionComplete(permissionCode);
+                        callBack.onPermissionFailure(PermissionFragment.this.oList.toArray(new String[0]));
+                        callBack.onPermissionComplete();
+                        PermissionHelper.removeFragment();
                     }
                 }
             }
@@ -170,8 +167,9 @@ public final class PermissionFragment extends Fragment {
         boolean boo = list.isEmpty() && (this.code1 == requestCode || this.code2 == requestCode);
         if (boo) {
             if (this.callBack != null) {
-                this.callBack.onPermissionSuccess(this.permissionCode);
-                this.callBack.onPermissionComplete(this.permissionCode);
+                this.callBack.onPermissionSuccess();
+                this.callBack.onPermissionComplete();
+                PermissionHelper.removeFragment();
             }
         } else {
             oList = list;
@@ -196,18 +194,44 @@ public final class PermissionFragment extends Fragment {
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
-        if (this.requestCode == requestCode) {
+        int requestCode1 = 0x33;
+        if (requestCode1 == requestCode) {
             requestPermission(this.code2);
         }
     }
 
+    @Override
+    public void onResume() {
+        super.onResume();
+        if (this.isStop) {
+            if (checkPermission()) {
+                if (this.callBack != null) {
+                    this.callBack.onPermissionSuccess();
+                    this.callBack.onPermissionComplete();
+                    PermissionHelper.removeFragment();
+                }
+            } else {
+                if (this.callBack != null) {
+                    this.callBack.onPermissionFailure(this.oList.toArray(new String[0]));
+                    this.callBack.onPermissionComplete();
+                    PermissionHelper.removeFragment();
+                }
+            }
+        }
+        this.isStop = false;
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        this.isStop = true;
+    }
+
     private void setFailure() {
         if (this.callBack != null) {
-            FailureMsg failureMsg = new FailureMsg();
-            failureMsg.setPermissionCode(this.permissionCode);
-            failureMsg.setFailurePermissions(this.oList.toArray(new String[0]));
-            this.callBack.onPermissionFailure(failureMsg);
-            this.callBack.onPermissionComplete(this.permissionCode);
+            this.callBack.onPermissionFailure(this.oList.toArray(new String[0]));
+            this.callBack.onPermissionComplete();
+            PermissionHelper.removeFragment();
         }
     }
 

+ 33 - 32
permissionlib/src/main/java/com/benyanyi/permissionlib/PermissionHelper.java

@@ -1,6 +1,7 @@
 package com.benyanyi.permissionlib;
 
 import android.app.Activity;
+import android.app.Fragment;
 import android.app.FragmentManager;
 
 /**
@@ -12,16 +13,14 @@ import android.app.FragmentManager;
 public class PermissionHelper implements PermissionConfig {
     private static PermissionConfig instance;
     private static Activity mActivity;
-
-    private String tag = "PermissionHelper";
-
+    private static String tag = "PermissionHelper";
     private final PermissionFragment permissionFragment;
 
     private PermissionHelper() {
         permissionFragment = getFragment();
     }
 
-    public static PermissionConfig getInstance(Activity activity) {
+    public static PermissionConfig with(Activity activity) {
         if (instance == null) {
             mActivity = activity;
             instance = new PermissionHelper();
@@ -37,9 +36,11 @@ public class PermissionHelper implements PermissionConfig {
         return instance;
     }
 
+    public static PermissionConfig with(Fragment fragment) {
+        return with(fragment.getActivity());
+    }
+
     private PermissionFragment getFragment() {
-//        PermissionFragment fragment = (PermissionFragment) this.mActivity.getFragmentManager()
-//                .findFragmentByTag(tag);
         PermissionFragment fragment = (PermissionFragment) mActivity.getFragmentManager().findFragmentByTag(tag);
         if (fragment == null) {
             fragment = new PermissionFragment();
@@ -53,50 +54,50 @@ public class PermissionHelper implements PermissionConfig {
         return fragment;
     }
 
+    @Override
     public PermissionConfig setPermissions(String... permissions) {
         this.permissionFragment.setPermissions(permissions);
         return this;
     }
 
+    @Override
     public PermissionConfig setPermissionDialogInfo(PermissionDialogInfo info) {
         this.permissionFragment.setInfo(info);
         return this;
     }
 
-    public PermissionConfig setPermissionCallBack(PermissionCallBack callBack) {
-        this.permissionFragment.setCallBack(callBack);
+    /**
+     * 使用默认dialog
+     *
+     * @return
+     */
+    @Override
+    public PermissionConfig setDefaultPermissionDialogInfo() {
+        this.permissionFragment.setInfo(PermissionDefaultDialogInfo.getInfo(mActivity));
         return this;
     }
 
-    public void hasPermission(int permissionCode) {
-        this.permissionFragment.startForPermissionResult(permissionCode);
-    }
-
-    public void hasPermission(int permissionCode, PermissionDialogInfo info, String... permissions) {
-        this.setPermissions(permissions);
-        this.setPermissionDialogInfo(info);
-        this.permissionFragment.startForPermissionResult(permissionCode);
-    }
-
-    public void hasPermission(int permissionCode, PermissionCallBack callBack) {
-        this.setPermissionCallBack(callBack);
-        this.permissionFragment.startForPermissionResult(permissionCode);
-    }
-
-    public void hasPermission(int permissionCode, PermissionCallBack callBack, String... permissions) {
-        this.setPermissions(permissions);
-        this.setPermissionCallBack(callBack);
-        this.permissionFragment.startForPermissionResult(permissionCode);
+    @Override
+    public void request(PermissionCallBack callBack) {
+        this.permissionFragment.setCallBack(callBack);
+        this.permissionFragment.startForPermissionResult();
     }
 
-    public void hasPermission(int permissionCode, PermissionDialogInfo info, PermissionCallBack callBack, String... permissions) {
-        this.setPermissionDialogInfo(info);
-        this.setPermissions(permissions);
-        this.setPermissionCallBack(callBack);
-        this.permissionFragment.startForPermissionResult(permissionCode);
+    /**
+     * 解绑 Activity
+     */
+    static void removeFragment() {
+        if (instance != null && mActivity != null) {
+            Fragment fragment = mActivity.getFragmentManager().findFragmentByTag(tag);
+            if (fragment != null) {
+                mActivity.getFragmentManager().beginTransaction().remove(fragment).commitAllowingStateLoss();
+            }
+        }
     }
 
     public static void destroy() {
+        removeFragment();
+        mActivity = null;
         instance = null;
     }
 }