public static int checkPermission(@NonNull Context context, @NonNull String permission, int pid, int uid, String packageName) { if (context.checkPermission(permission, pid, uid) == -1) { return -1; } String op = AppOpsManagerCompat.permissionToOp(permission); if (op == null) { return 0; } if (packageName == null) { String[] packageNames = context.getPackageManager().getPackagesForUid(uid); if (packageNames == null || packageNames.length <= 0) { return -1; } packageName = packageNames[0]; } return AppOpsManagerCompat.noteProxyOp(context, op, packageName) != 0 ? -2 : 0; }
static boolean hasPermission(@NonNull Context context, @NonNull List<String> permissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true; for (String permission : permissions) { int result = ContextCompat.checkSelfPermission(context, permission); if (result == PackageManager.PERMISSION_DENIED) return false; String op = AppOpsManagerCompat.permissionToOp(permission); if (TextUtils.isEmpty(op)) continue; result = AppOpsManagerCompat.noteProxyOp(context, op, context.getPackageName()); if (result != AppOpsManagerCompat.MODE_ALLOWED) return false; } return true; }
/** * Check if the calling context has a set of permissions. * * @param context {@link Context}. * @param permissions one or more permissions. * @return true, other wise is false. */ public static boolean hasPermission(@NonNull Context context, @NonNull List<String> permissions) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true; for (String permission : permissions) { int result = ContextCompat.checkSelfPermission(context, permission); if (result == PackageManager.PERMISSION_DENIED) return false; String op = AppOpsManagerCompat.permissionToOp(permission); if (TextUtils.isEmpty(op)) continue; result = AppOpsManagerCompat.noteProxyOp(context, op, context.getPackageName()); if (result != AppOpsManagerCompat.MODE_ALLOWED) return false; } return true; }
private static boolean hasSelfPermissionForXiaomi(Context context, String permission) { String permissionToOp = AppOpsManagerCompat.permissionToOp(permission); if (permissionToOp == null) { // in case of normal permissions(e.g. INTERNET) return true; } int noteOp = AppOpsManagerCompat.noteOp(context, permissionToOp, Process.myUid(), context.getPackageName()); return noteOp == AppOpsManagerCompat.MODE_ALLOWED && checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED; }