{"id":963,"date":"2023-03-11T19:42:35","date_gmt":"2023-03-11T11:42:35","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=963"},"modified":"2023-04-29T13:29:15","modified_gmt":"2023-04-29T05:29:15","slug":"dynamic-permission-request-encapsulation-for-android-componentization-development","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/11\/dynamic-permission-request-encapsulation-for-android-componentization-development\/","title":{"rendered":"Android\u7ec4\u4ef6\u5316\u5f00\u53d1\u4e4b\u52a8\u6001\u6743\u9650\u8bf7\u6c42\u5c01\u88c5"},"content":{"rendered":"<h2>Dexter<\/h2>\n<p>Github\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/Karumi\/Dexter\">https:\/\/github.com\/Karumi\/Dexter<\/a><\/p>\n<h3>\u4f9d\u8d56\u5f15\u7528<\/h3>\n<pre><code>implementation &#039;com.karumi:dexter:5.0.0&#039;<\/code><\/pre>\n<p><!-- more --><\/p>\n<h3>\u5c01\u88c5\u8c03\u7528<\/h3>\n<pre><code class=\"language-java\">DexterPermissionHelper.requestPermissions(this, new DexterPermissionHelper.PermissionsCheckListener() {\n    @Override\n    public void onPermissionsGranted(int permissionType) {\n        Toast.makeText(MainActivity.this, &quot;\u5df2\u83b7\u5f97\u6743\u9650&quot;, Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onPermissionsDenied(int permissionType) {\n\n    }\n});<\/code><\/pre>\n<h3>\u5c01\u88c5\u5b9e\u73b0<\/h3>\n<p>DexterPermissionHelper.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou.helper.permission;\n\nimport android.Manifest;\nimport android.app.Activity;\nimport android.os.Build;\nimport android.util.Log;\n\nimport com.karumi.dexter.Dexter;\nimport com.karumi.dexter.MultiplePermissionsReport;\nimport com.karumi.dexter.PermissionToken;\nimport com.karumi.dexter.listener.PermissionDeniedResponse;\nimport com.karumi.dexter.listener.PermissionGrantedResponse;\nimport com.karumi.dexter.listener.PermissionRequest;\nimport com.karumi.dexter.listener.multi.MultiplePermissionsListener;\n\nimport java.util.List;\n\n\/**\n * Created by yezhou on 2017\/11\/6.\n *\/\n\npublic class DexterPermissionHelper {\n    private static final String TAG = &quot;yezhou&quot;;\n    public static final int BASE_PERMISSIONS = 0;\n    public static final int SCAN_PERMISSIONS = 1;\n    public static final int TAKE_PHOTO_PERMISSIONS = 2;\n\n    private static final String[] permissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.WRITE_EXTERNAL_STORAGE,\n            Manifest.permission.READ_PHONE_STATE,\n            Manifest.permission.ACCESS_FINE_LOCATION,\n            Manifest.permission.ACCESS_COARSE_LOCATION\n    };\n\n    private static final String[] scanPermissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.CAMERA\n    };\n\n    private static final String[] takePhotoPermissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.WRITE_EXTERNAL_STORAGE,\n            Manifest.permission.CAMERA\n    };\n\n    public static void requestPermissions(Activity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, permissions, listener, BASE_PERMISSIONS);\n    }\n\n    public static void requestScanPermissions(Activity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, scanPermissions, listener, SCAN_PERMISSIONS);\n    }\n\n    public static void requestTakePhotoPermissions(Activity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, takePhotoPermissions, listener, TAKE_PHOTO_PERMISSIONS);\n    }\n\n    public static void requestPermissions(Activity activity, final String[] permissions, final PermissionsCheckListener listener, final int permissionType) {\n        if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {\n            Dexter.withActivity(activity)\n                    .withPermissions(permissions)\n                    .withListener(new MultiplePermissionsListener() {\n                        @Override\n                        public void onPermissionsChecked(MultiplePermissionsReport report) {\n                            for (PermissionGrantedResponse grantedResponse : report.getGrantedPermissionResponses()) {\n                                Log.i(TAG, &quot;\u5df2\u83b7\u5f97\u6743\u9650: &quot; + grantedResponse.getPermissionName());\n                            }\n                            for (PermissionDeniedResponse deniedResponse : report.getDeniedPermissionResponses()) {\n                                Log.i(TAG, &quot;\u6743\u9650\u88ab\u62d2\u7edd: &quot; + deniedResponse.getPermissionName());\n                            }\n                            if (listener != null) {\n                                Log.i(TAG, &quot;report.getGrantedPermissionResponses().size(): &quot; + report.getGrantedPermissionResponses().size() + &quot;, permissions.length: &quot; + permissions.length);\n                                if (report.getGrantedPermissionResponses().size() == permissions.length) {\n                                    listener.onPermissionsGranted(permissionType);\n                                } else {\n                                    listener.onPermissionsDenied(permissionType);\n                                }\n                            }\n                        }\n\n                        @Override\n                        public void onPermissionRationaleShouldBeShown(List&lt;PermissionRequest&gt; list, PermissionToken permissionToken) {\n\n                        }\n                    }).check();\n        }\n    }\n\n    public interface PermissionsCheckListener {\n        void onPermissionsGranted(int permissionType);\n\n        void onPermissionsDenied(int permissionType);\n    }\n\n}<\/code><\/pre>\n<h2>RxPermissions<\/h2>\n<p>Github\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/tbruyelle\/RxPermissions\">https:\/\/github.com\/tbruyelle\/RxPermissions<\/a><\/p>\n<h3>\u4f9d\u8d56\u5f15\u7528<\/h3>\n<pre><code>implementation &#039;com.github.tbruyelle:rxpermissions:0.10.2&#039;<\/code><\/pre>\n<h3>\u5c01\u88c5\u8c03\u7528<\/h3>\n<pre><code class=\"language-java\">RxPermissionHelper.requestPermissions(this, new RxPermissionHelper.PermissionsCheckListener() {\n    @Override\n    public void onPermissionsGranted(int permissionType) {\n        Toast.makeText(MainActivity.this, &quot;\u5df2\u83b7\u5f97\u6743\u9650&quot;, Toast.LENGTH_SHORT).show();\n    }\n\n    @Override\n    public void onPermissionsDenied(int permissionType) {\n\n    }\n});<\/code><\/pre>\n<h3>\u5c01\u88c5\u5b9e\u73b0<\/h3>\n<p>DexterPermissionHelper.java<\/p>\n<pre><code class=\"language-java\">package me.yezhou.helper.permission;\n\nimport android.Manifest;\nimport android.annotation.SuppressLint;\nimport android.os.Build;\nimport android.support.v4.app.Fragment;\nimport android.support.v4.app.FragmentActivity;\nimport android.util.Log;\n\nimport com.tbruyelle.rxpermissions2.RxPermissions;\n\nimport io.reactivex.functions.Consumer;\n\n\/**\n * Created by yezhou on 2017\/11\/6.\n *\/\n\npublic class RxPermissionHelper {\n    private static final String TAG = &quot;yezhou&quot;;\n    public static final int BASE_PERMISSIONS = 0;\n    public static final int SCAN_PERMISSIONS = 1;\n    public static final int TAKE_PHOTO_PERMISSIONS = 2;\n\n    private static final String[] permissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.WRITE_EXTERNAL_STORAGE,\n            Manifest.permission.READ_PHONE_STATE,\n            Manifest.permission.ACCESS_FINE_LOCATION,\n            Manifest.permission.ACCESS_COARSE_LOCATION\n    };\n\n    private static final String[] scanPermissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.CAMERA\n    };\n\n    private static final String[] takePhotoPermissions = {\n            Manifest.permission.READ_EXTERNAL_STORAGE,\n            Manifest.permission.WRITE_EXTERNAL_STORAGE,\n            Manifest.permission.CAMERA\n    };\n\n    public static void requestPermissions(FragmentActivity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, permissions, listener, BASE_PERMISSIONS);\n    }\n\n    public static void requestPermissions(Fragment fragment, PermissionsCheckListener listener) {\n        requestPermissions(fragment, permissions, listener, BASE_PERMISSIONS);\n    }\n\n    public static void requestScanPermissions(FragmentActivity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, scanPermissions, listener, SCAN_PERMISSIONS);\n    }\n\n    public static void requestScanPermissions(Fragment fragment, PermissionsCheckListener listener) {\n        requestPermissions(fragment, scanPermissions, listener, SCAN_PERMISSIONS);\n    }\n\n    public static void requestTakePhotoPermissions(FragmentActivity activity, PermissionsCheckListener listener) {\n        requestPermissions(activity, takePhotoPermissions, listener, TAKE_PHOTO_PERMISSIONS);\n    }\n\n    public static void requestTakePhotoPermissions(Fragment Fragment, PermissionsCheckListener listener) {\n        requestPermissions(Fragment, takePhotoPermissions, listener, TAKE_PHOTO_PERMISSIONS);\n    }\n\n    @SuppressLint(&quot;CheckResult&quot;)\n    public static void requestPermissions(FragmentActivity activity, final String[] permissions, final PermissionsCheckListener listener, final int permissionType) {\n        if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {\n            RxPermissions rxPermissions = new RxPermissions(activity);\n            rxPermissions.request(permissions)\n                    .subscribe(new Consumer&lt;Boolean&gt;() {\n                        @Override\n                        public void accept(Boolean isGranted) {\n                            if (isGranted) {\n                                Log.i(TAG, &quot;\u5df2\u83b7\u5f97\u6743\u9650: &quot; + RxPermissionHelper.toString(permissions));\n                                if (listener != null) {\n                                    listener.onPermissionsGranted(permissionType);\n                                }\n                            } else {\n                                Log.i(TAG, &quot;\u6743\u9650\u88ab\u62d2\u7edd: &quot; + RxPermissionHelper.toString(permissions));\n                                if (listener != null) {\n                                    listener.onPermissionsDenied(permissionType);\n                                }\n                            }\n                        }\n                    });\n        }\n    }\n\n    @SuppressLint(&quot;CheckResult&quot;)\n    public static void requestPermissions(Fragment fragment, final String[] permissions, final PermissionsCheckListener listener, final int permissionType) {\n        if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {\n            RxPermissions rxPermissions = new RxPermissions(fragment);\n            rxPermissions.request(permissions)\n                    .subscribe(new Consumer&lt;Boolean&gt;() {\n                        @Override\n                        public void accept(Boolean isGranted) {\n                            if (isGranted) {\n                                Log.i(TAG, &quot;\u5df2\u83b7\u5f97\u6743\u9650: &quot; + RxPermissionHelper.toString(permissions));\n                                if (listener != null) {\n                                    listener.onPermissionsGranted(permissionType);\n                                }\n                            } else {\n                                Log.i(TAG, &quot;\u6743\u9650\u88ab\u62d2\u7edd: &quot; + RxPermissionHelper.toString(permissions));\n                                if (listener != null) {\n                                    listener.onPermissionsDenied(permissionType);\n                                }\n                            }\n                        }\n                    });\n        }\n    }\n\n    public interface PermissionsCheckListener {\n        void onPermissionsGranted(int permissionType);\n\n        void onPermissionsDenied(int permissionType);\n    }\n\n    private static String toString(String[] permissions) {\n        if (permissions != null &amp;&amp; permissions.length &gt; 0) {\n            StringBuilder sBuilder = new StringBuilder();\n            sBuilder.append(&#039;[&#039;);\n            for (int i = 0; i &lt; permissions.length; i++) {\n                if (i == 0) {\n                    sBuilder.append(permissions[i]);\n                } else {\n                    sBuilder.append(&quot;, &quot;);\n                    sBuilder.append(permissions[i]);\n                }\n            }\n            sBuilder.append(&#039;]&#039;);\n            return sBuilder.toString();\n        }\n        return &quot;&quot;;\n    }\n\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Dexter Github\uff1ahttps:\/\/github.com\/Karumi\/Dexter \u4f9d\u8d56\u5f15\u7528 imp [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[115],"tags":[262,263],"class_list":["post-963","post","type-post","status-publish","format-standard","hentry","category-thirdpart-framework","tag-dexter","tag-rxpermissions"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/963","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=963"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/963\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=963"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=963"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=963"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}