Android permission grant/request tool class

PackageManager.grantRuntimePermission() only applies to App with system uid

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.text.TextUtils;

import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public final class PermissionUtils {
    
    
    public static final String[] DANGEROURS_PERMISSIONS =
            {
    
    Manifest.permission.WRITE_EXTERNAL_STORAGE,
                    Manifest.permission.READ_PRIVILEGED_PHONE_STATE};

    private PermissionUtils() {
    
    
    }

    public static boolean checkSelfPermission(Context context, String permission) {
    
    
        if (context == null || TextUtils.isEmpty(permission)) {
    
    
            return false;
        }
        int result = context.checkSelfPermission(permission);
        return result == PackageManager.PERMISSION_GRANTED;
    }

    public static List<String> checkSelfPermissions(Context context, List<String> permissions) {
    
    
        if (context == null || permissions == null || permissions.isEmpty()) {
    
    
            return Collections.emptyList();
        }
        List<String> notGrantedPermissions = new LinkedList<>();
        for (String permission : permissions) {
    
    
            if (!checkSelfPermission(context, permission)) {
    
    
                notGrantedPermissions.add(permission);
            }
        }
        return notGrantedPermissions;
    }

    public static List<String> checkSelfPermissions(Context context, String... permissions) {
    
    
        if (context == null || permissions == null || permissions.length == 0) {
    
    
            return Collections.emptyList();
        }
        return checkSelfPermissions(context, Arrays.asList(permissions));
    }

    public static void requestPermissions(Activity activity, String... permissions) {
    
    
        if (activity == null || permissions == null || permissions.length == 0) {
    
    
            return;
        }
        activity.requestPermissions(permissions, 0);
    }

    public static void requestPermissions(Activity activity, List<String> permissions) {
    
    
        if (activity == null || permissions == null || permissions.isEmpty()) {
    
    
            return;
        }
        requestPermissions(activity, permissions.toArray(new String[permissions.size()]));
    }

    public static void checkAndRequestPermissions(Activity activity, List<String> permissions) {
    
    
        if (activity == null || permissions == null || permissions.isEmpty()) {
    
    
            return;
        }
        List<String> notGrantedPermissions = checkSelfPermissions(activity, permissions);
        if (!notGrantedPermissions.isEmpty()) {
    
    
            requestPermissions(activity, notGrantedPermissions);
        }
    }

    public static void checkAndRequestPermissions(Activity activity, String... permissions) {
    
    
        if (activity == null || permissions == null || permissions.length == 0) {
    
    
            return;
        }
        checkAndRequestPermissions(activity, Arrays.asList(permissions));
    }

    public static void grantRuntimePermission(Context context, String permission) {
    
    
        if (context == null || TextUtils.isEmpty(permission)) {
    
    
            return;
        }
        context.getPackageManager().grantRuntimePermission(context.getPackageName(), permission,
                UserHandle.SYSTEM);
    }

    public static void grantRuntimePermissions(Context context, List<String> permissions) {
    
    
        if (context == null || permissions == null || permissions.isEmpty()) {
    
    
            return;
        }
        for (String permission : permissions) {
    
    
            grantRuntimePermission(context, permission);
        }
    }

    public static void grantRuntimePermissions(Context context, String... permissions) {
    
    
        if (context == null || permissions == null || permissions.length == 0) {
    
    
            return;
        }
        grantRuntimePermissions(context, Arrays.asList(permissions));
    }

    public static void checkAndGrantPermissions(Context context, List<String> permissions) {
    
    
        if (context == null || permissions == null || permissions.isEmpty()) {
    
    
            return;
        }
        List<String> notGrantedPermissions = checkSelfPermissions(context, permissions);
        if (!notGrantedPermissions.isEmpty()) {
    
    
            grantRuntimePermissions(context, notGrantedPermissions);
        }
    }

    public static void checkAndGrantPermissions(Context context, String... permissions) {
    
    
        if (context == null || permissions == null || permissions.length == 0) {
    
    
            return;
        }
        checkAndGrantPermissions(context, Arrays.asList(permissions));
    }
}

Guess you like

Origin blog.csdn.net/hegan2010/article/details/103405191