Android 6.0 multiple permissions

后端 未结 22 2229
太阳男子
太阳男子 2020-11-22 03:58

I know that Android 6.0 has new permissions and I know I can call them with something like this

if (ContextCompat.checkSelfPermission(this, Manifest.permiss         


        
22条回答
  •  执笔经年
    2020-11-22 04:41

    My handler class for request multiple permissions. You can check the full using here

    public class RequestPermissionHandler {
        private Activity mActivity;
        private RequestPermissionListener mRequestPermissionListener;
        private int mRequestCode;
    
        public void requestPermission(Activity activity, @NonNull String[] permissions, int requestCode,
                RequestPermissionListener listener) {
            mActivity = activity;
            mRequestCode = requestCode;
            mRequestPermissionListener = listener;
    
            if (!needRequestRuntimePermissions()) {
                mRequestPermissionListener.onSuccess();
                return;
            }
            requestUnGrantedPermissions(permissions, requestCode);
        }
    
        private boolean needRequestRuntimePermissions() {
            return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
        }
    
        private void requestUnGrantedPermissions(String[] permissions, int requestCode) {
            String[] unGrantedPermissions = findUnGrantedPermissions(permissions);
            if (unGrantedPermissions.length == 0) {
                mRequestPermissionListener.onSuccess();
                return;
            }
            ActivityCompat.requestPermissions(mActivity, unGrantedPermissions, requestCode);
        }
    
        private boolean isPermissionGranted(String permission) {
            return ActivityCompat.checkSelfPermission(mActivity, permission)
                    == PackageManager.PERMISSION_GRANTED;
        }
    
        private String[] findUnGrantedPermissions(String[] permissions) {
            List unGrantedPermissionList = new ArrayList<>();
            for (String permission : permissions) {
                if (!isPermissionGranted(permission)) {
                    unGrantedPermissionList.add(permission);
                }
            }
            return unGrantedPermissionList.toArray(new String[0]);
        }
    
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                @NonNull int[] grantResults) {
            if (requestCode == mRequestCode) {
                if (grantResults.length > 0) {
                    for (int grantResult : grantResults) {
                        if (grantResult != PackageManager.PERMISSION_GRANTED) {
                            mRequestPermissionListener.onFailed();
                            return;
                        }
                    }
                    mRequestPermissionListener.onSuccess();
                } else {
                    mRequestPermissionListener.onFailed();
                }
            }
        }
    
        public interface RequestPermissionListener {
            void onSuccess();
    
            void onFailed();
        }
    }
    

提交回复
热议问题