Android 6.0 multiple permissions

后端 未结 22 2209
太阳男子
太阳男子 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

    Use helper like this (permissions names do not matter).

    public class MyPermission {
    
    private static final int PERMISSION_REQUEST_ALL = 127;
    private MainActivity mMainActivity;
    
    MyPermission(MainActivity mainActivity) {
        mMainActivity = mainActivity;
    }
    
    public static boolean hasPermission(String permission, Context context) {
        if (isNewPermissionModel()) {
            return (ActivityCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED);
        }
        return true;
    }
    
    private static boolean hasPermissions(Context context, String... permissions) {
        if (isNewPermissionModel() && context != null && permissions != null) {
            for (String permission : permissions) {
                if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                    return false;
                }
            }
        }
        return true;
    }
    
    private static boolean shouldShowRationale(Activity activity, String permission) {
        return isNewPermissionModel() && ActivityCompat.shouldShowRequestPermissionRationale(activity, permission);
    }
    
    private static boolean isNewPermissionModel() {
        return VERSION.SDK_INT > VERSION_CODES.LOLLIPOP_MR1;
    }
    
    
    /**
     * check all permissions
     */
    void checkAll() {
        //check dangerous permissions, make request if need (Android will ask only for the ones it needs)
        String[] PERMISSIONS = {
                permission.READ_CALENDAR,           
                permission.ACCESS_COARSE_LOCATION   
        };
    
        if (!hasPermissions(mMainActivity, PERMISSIONS)) {
            ActivityCompat.requestPermissions(mMainActivity, PERMISSIONS, PERMISSION_REQUEST_ALL);
        }
    }
    
    void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQUEST_ALL) {
            if (grantResults.length > 0) {
                //for not granted
                for (int i = 0; i < permissions.length; i++) {
    
                    if (permissions[i].equals(permission.READ_CALENDAR)) {
                        if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                            smartRequestPermissions(permission.READ_CALENDAR, R.string.permission_required_dialog_read_calendar);
                        }
                    } else if (permissions[i].equals(permission.ACCESS_COARSE_LOCATION)) {
                        if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                            smartRequestPermissions(permission.ACCESS_COARSE_LOCATION, R.string.permission_required_dialog_access_coarse_location);
                        }
                    }
    
                }
            }
        }
    }
    
    private void smartRequestPermissions(final String permissionName, int permissionRequiredDialog) {
        if (shouldShowRationale(mMainActivity, permissionName)) {// If the user turned down the permission request in the past and chose the Don't ask again option in the permission request system dialog, this method returns false.
    
            //Show an explanation to the user with action
            mMainActivity.mSnackProgressBarManager.show(
                    new SnackProgressBar(
                            SnackProgressBar.TYPE_ACTION, mMainActivity.getString(permissionRequiredDialog)
                    )
                            .setAction("OK", new OnActionClickListener() {
                                @Override
                                public void onActionClick() {
                                    checkAll();
                                }
                            })
                            .setSwipeToDismiss(true).setAllowUserInput(true)
                    , MainActivity.SNACKBAR_WARNING_DURATION
            );
    
        } // else do nothing
    }
    

    }

提交回复
热议问题