android 应用权限判断
private static Hashtable<String, Integer> sPermissions = new Hashtable<String, Integer>(); public static boolean hasPermission(final String permission) { if (/*!sPermissions.containsKey(permission) || sPermissions.get(permission) == PackageManager.PERMISSION_DENIED*/true) {//bug498552 final Context context = Factory.get().getApplicationContext(); final int permissionState = context.checkSelfPermission(permission); sPermissions.put(permission, permissionState); } return sPermissions.get(permission) == PackageManager.PERMISSION_GRANTED; } public static boolean hasPermission(final String permission ,final Context context) { if (OsUtil.isAtLeastM()) { // It is safe to cache the PERMISSION_GRANTED result as the process gets killed if the // user revokes the permission setting. However, PERMISSION_DENIED should not be // cached as the process does not get killed if the user enables the permission setting. if (/*!sPermissions.containsKey(permission) || sPermissions.get(permission) == PackageManager.PERMISSION_DENIED*/true) {//bug498552 final int permissionState = context.checkSelfPermission(permission); sPermissions.put(permission, permissionState); } return sPermissions.get(permission) == PackageManager.PERMISSION_GRANTED; } else { return true; } } /** Does the app have all the specified permissions */ public static boolean hasPermissions(final String[] permissions , final Context context) { for (final String permission : permissions) { if (!hasPermission(permission,context)) { return false; } } return true; } public static boolean hasRequiredPermissions(final Context context) { return hasPermissions(sRequiredPermissions,context); } /** Does the app have all the specified permissions */ public static boolean hasPermissions(final String[] permissions) { for (final String permission : permissions) { if (!hasPermission(permission)) { return false; } } return true; } public static boolean hasPhonePermission() { return hasPermission(Manifest.permission.READ_PHONE_STATE); } public static boolean hasSmsPermission() { return hasPermission(Manifest.permission.READ_SMS); } public static boolean hasLocationPermission() { return OsUtil.hasPermission(Manifest.permission.ACCESS_FINE_LOCATION); } public static boolean hasStoragePermission() { // Note that READ_EXTERNAL_STORAGE and WRITE_EXTERNAL_STORAGE are granted or denied // together. return OsUtil.hasPermission(Manifest.permission.READ_EXTERNAL_STORAGE); } public static boolean hasRecordAudioPermission() { return OsUtil.hasPermission(Manifest.permission.RECORD_AUDIO); } public static String[] getMissingPermissions(final String[] permissions) { final ArrayList<String> missingList = new ArrayList<String>(); for (final String permission : permissions) { if (!hasPermission(permission)) { missingList.add(permission); } } final String[] missingArray = new String[missingList.size()]; missingList.toArray(missingArray); return missingArray; } private static String[] sRequiredPermissions = new String[] { // Required to read existing SMS threads Manifest.permission.READ_SMS, // Required for knowing the phone number, number of SIMs, etc. Manifest.permission.READ_PHONE_STATE, // This is not strictly required, but simplifies the contact picker scenarios Manifest.permission.READ_CONTACTS, Manifest.permission.RECEIVE_WAP_PUSH, // spread: add permission for share picture Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_SMS, Manifest.permission.RECEIVE_SMS, Manifest.permission.RECEIVE_MMS, Manifest.permission.SEND_SMS, Manifest.permission.RECEIVE_WAP_PUSH, Manifest.permission.CALL_PHONE, Manifest.permission.WRITE_CONTACTS, Manifest.permission.MANAGE_DOCUMENTS, }; /** Does the app have the minimum set of permissions required to operate. */ public static boolean hasRequiredPermissions() { return hasPermissions(sRequiredPermissions); } public static String[] getMissingRequiredPermissions() { return getMissingPermissions(sRequiredPermissions); } public static void getStoragePreminssion(Activity activity) { activity.requestPermissions( new String[] { Manifest.permission.READ_EXTERNAL_STORAGE ,Manifest.permission.WRITE_EXTERNAL_STORAGE},0); } public static void requestMissingPermission(Activity act){ act.requestPermissions(getMissingRequiredPermissions(),0); }
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论