1. 程式人生 > >android 許可權管理工具

android 許可權管理工具

此許可權管理工具只做了相機和地理位置許可權,可根據需求新增必要許可權
1.首先在android6.0以後不僅需要靜態設定許可權,也需要動態設定許可權

<uses-permission android:name="android.permission.CAMERA" />
<!--用於訪問GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--用於進行網路定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
2.檢測是否有此許可權
ContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED
3.對於檢測到沒有此許可權,要動態設定此許可權 ActivityCompat.requestPermissions(activity, permissions, requestCode); 4.許可權操作之後回撥操作onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
package com.dejun.commonsdk.util;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.util.SimpleArrayMap;

import com.orhanobut.logger.Logger;

import java.util.ArrayList;
import java.util.List;

/**
 * Author:DoctorWei
 * Time:2018/12/17 14:19
 * Description:動態許可權申請工具類 一般的軟體一般需要檔案讀寫許可權 訪問通訊錄許可權 定位許可權 相機拍照 錄音等許可權
 * email:
[email protected]
*/ public class PermissionsUtil { public static int REQUEST_CAMERA = 1; public static int REQUEST_EXTERNAL_STOREGE = 2; public static int REQUEST_CONTACTS = 3; public static int REQUEST_LOCATION = 4; private static final SimpleArrayMap<String, Integer> MIN_SDK_PERMISSIONS; static { MIN_SDK_PERMISSIONS = new SimpleArrayMap<>(8);//超過8就進行擴容 MIN_SDK_PERMISSIONS.put("com.android.voicemail.permission.ADD_VOICEMAIL", 14); MIN_SDK_PERMISSIONS.put("android.permission.BODY_SENSORS", 20); MIN_SDK_PERMISSIONS.put("android.permission.READ_CALL_LOG", 16); MIN_SDK_PERMISSIONS.put("android.permission.READ_EXTERNAL_STORAGE", 16); MIN_SDK_PERMISSIONS.put("android.permission.USE_SIP", 9); MIN_SDK_PERMISSIONS.put("android.permission.WRITE_CALL_LOG", 16); MIN_SDK_PERMISSIONS.put("android.permission.SYSTEM_ALERT_WINDOW", 23); MIN_SDK_PERMISSIONS.put("android.permission.WRITE_SETTINGS", 23); } private static boolean permissionExists(String permission) { Integer minVersion = MIN_SDK_PERMISSIONS.get(permission); return minVersion == null || Build.VERSION.SDK_INT >= minVersion; } /** * 手否有拍照許可權 * * @param activity * @return */ public static boolean hasCameraPermission(Activity activity,int requestCode) { if (!permissionExists(Manifest.permission.CAMERA)) {//無需動態申請許可權 Logger.d("permission", "your system does not suppport" + Manifest.permission.CAMERA + " permission"); return false; } boolean requestPermission = requestPermission(activity, Manifest.permission.CAMERA,requestCode ); return requestPermission; } /** * 是否有地理位置許可權 */ public static boolean hasLocationPermission(Activity activity,int requestCode) { boolean requestPermissions = requestPermissions(activity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},requestCode);//允許應用訪問精確(如GPS)性的定位 獲取粗糙位置許可權 return requestPermissions; } /** * 檢測是否需要一個許可權 */ public static boolean checkSinglePermisssion(Context context,String permission){ if (ContextCompat.checkSelfPermission(context,permission)==PackageManager.PERMISSION_GRANTED) { return true; }else { return false; } } /** * 請求許可權 */ public static boolean requestPermission(Activity activity, String permission, int requestCode) { if (checkSinglePermisssion(activity,permission)){ return true; }else{ ActivityCompat.requestPermissions( activity, new String[]{permission}, requestCode); return false; } } public static boolean requestPermissions(Activity activity, String[] permissions, int requestCode) { List<String> unGrantedPermissions = checkMorePermisssions(activity, permissions); if (unGrantedPermissions.size()==0){//無需請求 return true; }else{ requestMorePermissions(activity, unGrantedPermissions, requestCode); return false; } } private static void requestMorePermissions(Activity activity, List<String> unGrantedPermissions, int requestCode) { String[] permissions = (String[]) unGrantedPermissions.toArray(new String[unGrantedPermissions.size()]); requestMorePermissions(activity, permissions, requestCode); } /** * 請求多個許可權 */ public static void requestMorePermissions(Activity activity, String[] permissions, int requestCode) { ActivityCompat.requestPermissions(activity, permissions, requestCode); } /** * 檢測多個許可權 查詢出未授權的許可權 * @param context * @param permissions * @return */ public static List<String> checkMorePermisssions(Context context,String[] permissions){ List<String> unGrantedPermissions=new ArrayList<>(); for (int i = 0; i <permissions.length ; i++) { String permission = permissions[i]; if (!checkSinglePermisssion(context,permission)){ unGrantedPermissions.add(permission); } } return unGrantedPermissions; } /** * 判斷許可權是否申請成功 */ public static boolean permissionRequest(int[] grantResults) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) return true; else return false; } /** * 使用者申請多個許可權返回 */ public static boolean permissionsRequest(Context context, String[] permissions) { List<String> permissionList = checkMorePermisssions(context, permissions); if (permissionList.size() == 0) { return true; } else { return false; } } }