android6.0以后获取权限(一次性获取所有)

首先上工具类

  1. <pre name="code" class="java"><pre name="code" class="java">/** 
  2.  * Created by LH on 2016/7/27. 
  3.  */  
  4. public class PermissionUtil {  
  5.     private static PermissionUtil permissionUtil = null;  
  6.     private static List<String> mListPermissions;  
  7.     private static final String PERMISSIONS_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;  
  8.     private static final String PERMISSIONS_PHONE = Manifest.permission.READ_PHONE_STATE;  
  9.     private static final String PERMISSIONS_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;  
  10.     private static final String PERMISSIONS_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;  
  11.     private static final String PERMISSIONS_AUDIO = Manifest.permission.RECORD_AUDIO;  
  12.   
  13.     /** 
  14.      * 添加权限 
  15.      * author LH 
  16.      * data 2016/7/27 11:27 
  17.      */  
  18.     private void addAllPermissions(List<String> mListPermissions) {  
  19.         mListPermissions.add(PERMISSIONS_STORAGE);  
  20.         mListPermissions.add(PERMISSIONS_PHONE);  
  21.         mListPermissions.add(PERMISSIONS_ACCOUNTS);  
  22.         mListPermissions.add(PERMISSIONS_LOCATION);  
  23.         mListPermissions.add(PERMISSIONS_AUDIO);  
  24.     }  
  25.   
  26.     /** 
  27.      * 单例模式初始化 
  28.      * author LH 
  29.      * data 2016/7/27 11:27 
  30.      */  
  31.     public static PermissionUtil getInstance() {  
  32.         if (permissionUtil == null) {  
  33.             permissionUtil = new PermissionUtil();  
  34.         }  
  35.         return permissionUtil;  
  36.     }  
  37.   
  38.     /** 
  39.      * 判断当前为M以上版本 
  40.      * author LH 
  41.      * data 2016/7/27 11:29 
  42.      */  
  43.     public boolean isOverMarshmallow() {  
  44.         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;  
  45.     }  
  46.   
  47.     /** 
  48.      * 获得没有授权的权限 
  49.      * author LH 
  50.      * data 2016/7/27 11:46 
  51.      */  
  52.     @TargetApi(value = Build.VERSION_CODES.M)  
  53.     public List<String> findDeniedPermissions(Activity activity, List<String> permissions) {  
  54.         List<String> denyPermissions = new ArrayList<>();  
  55.         for (String value : permissions) {  
  56.             if (activity.checkSelfPermission(value) != PackageManager.PERMISSION_GRANTED) {  
  57.                 denyPermissions.add(value);  
  58.             }  
  59.         }  
  60.         return denyPermissions;  
  61.     }  
  62.   
  63.     /** 
  64.      * 获取所有权限 
  65.      * author LH 
  66.      * data 2016/7/27 13:37 
  67.      */  
  68.     @TargetApi(value = Build.VERSION_CODES.M)  
  69.     public void requestPermissions(Activity activity, int requestCode, PermissionCallBack permissionCallBack) {  
  70.         if (mListPermissions == null) {  
  71.             mListPermissions = new ArrayList<String>();  
  72.             addAllPermissions(mListPermissions);  
  73.         }  
  74.         if (!isOverMarshmallow()) {  
  75.             return;  
  76.         }  
  77.         mListPermissions = findDeniedPermissions(activity, mListPermissions);  
  78.         if (mListPermissions != null && mListPermissions.size() > 0) {  
  79.             activity.requestPermissions(mListPermissions.toArray(new String[mListPermissions.size()]),  
  80.                     requestCode);  
  81.         } else {  
  82.             permissionCallBack.onPermissionSuccess();  
  83.         }  
  84.     }  
  85.   
  86.     public void requestResult(Activity activity, String[] permissions, int[] grantResults, PermissionCallBack permissionCallBack) {  
  87.         mListPermissions = new ArrayList<String>();  
  88.         ArrayList<String> noPermissions = new ArrayList<String>();  
  89.         ArrayList<String> rejectPermissons = new ArrayList<String>();  
  90.         for (int i = 0; i < grantResults.length; i++) {  
  91.             if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {  
  92.                 if (isOverMarshmallow()) {  
  93.                     boolean isShould = activity.shouldShowRequestPermissionRationale(permissions[i]);  
  94.                     mListPermissions.add(permissions[i]);  
  95.                     if (isShould) {  
  96.                         noPermissions.add(permissions[i]);  
  97.                     } else {  
  98.                         rejectPermissons.add(permissions[i]);  
  99.                     }  
  100.                 }  
  101.             }  
  102.         }  
  103.   
  104.         if (noPermissions.size() > 0) {  
  105.             permissionCallBack.onPermissionFail();  
  106.         } else if (rejectPermissons.size() > 0) {  
  107.             ArrayList<String> permissonsList = new ArrayList<String>();  
  108.             for (int i = 0; i < rejectPermissons.size(); i++) {  
  109.                 String strPermissons = rejectPermissons.get(i);  
  110.                 if (PERMISSIONS_STORAGE.equals(strPermissons)) {  
  111.                     permissonsList.add(activity.getString(R.string.permission_storage));  
  112.                 } else if (PERMISSIONS_ACCOUNTS.equals(strPermissons)) {  
  113.                     permissonsList.add(activity.getString(R.string.permission_accounts));  
  114.                 } else if (PERMISSIONS_PHONE.equals(strPermissons)) {  
  115.                     permissonsList.add(activity.getString(R.string.permission_phone));  
  116.                 } else if (PERMISSIONS_LOCATION.equals(strPermissons)) {  
  117.                     permissonsList.add(activity.getString(R.string.permission_location));  
  118.                 } else if (PERMISSIONS_AUDIO.equals(strPermissons)) {  
  119.                     permissonsList.add(activity.getString(R.string.permission_audio));  
  120.                 }  
  121.             }  
  122.             String strPermissons = permissonsList.toString();  
  123.             strPermissons = strPermissons.replace("[""");  
  124.             strPermissons = strPermissons.replace("]""");  
  125.             strPermissons = strPermissons.replace(",""、");  
  126.             String strAppName = activity.getString(R.string.app_name);  
  127.             String strMessage = activity.getString(R.string.permission_message);  
  128.             strMessage = String.format(strMessage, strAppName, strPermissons, "\"");  
  129.             permissionCallBack.onPermissionReject(strMessage);  
  130.   
  131.         } else {  
  132.             permissionCallBack.onPermissionSuccess();  
  133.         }  
  134.     }  
  135.   
  136.     public interface PermissionCallBack {  
  137.         void onPermissionSuccess();  
  138.   
  139.         void onPermissionReject(String strMessage);  
  140.   
  141.         void onPermissionFail();  
  142.     }  
  143. }  
<pre name="code" class="java"><pre name="code" class="java">/**
 * Created by LH on 2016/7/27.
 */
public class PermissionUtil {
    private static PermissionUtil permissionUtil = null;
    private static List<String> mListPermissions;
    private static final String PERMISSIONS_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
    private static final String PERMISSIONS_PHONE = Manifest.permission.READ_PHONE_STATE;
    private static final String PERMISSIONS_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;
    private static final String PERMISSIONS_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
    private static final String PERMISSIONS_AUDIO = Manifest.permission.RECORD_AUDIO;

    /**
     * 添加权限
     * author LH
     * data 2016/7/27 11:27
     */
    private void addAllPermissions(List<String> mListPermissions) {
        mListPermissions.add(PERMISSIONS_STORAGE);
        mListPermissions.add(PERMISSIONS_PHONE);
        mListPermissions.add(PERMISSIONS_ACCOUNTS);
        mListPermissions.add(PERMISSIONS_LOCATION);
        mListPermissions.add(PERMISSIONS_AUDIO);
    }

    /**
     * 单例模式初始化
     * author LH
     * data 2016/7/27 11:27
     */
    public static PermissionUtil getInstance() {
        if (permissionUtil == null) {
            permissionUtil = new PermissionUtil();
        }
        return permissionUtil;
    }

    /**
     * 判断当前为M以上版本
     * author LH
     * data 2016/7/27 11:29
     */
    public boolean isOverMarshmallow() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    }

    /**
     * 获得没有授权的权限
     * author LH
     * data 2016/7/27 11:46
     */
    @TargetApi(value = Build.VERSION_CODES.M)
    public List<String> findDeniedPermissions(Activity activity, List<String> permissions) {
        List<String> denyPermissions = new ArrayList<>();
        for (String value : permissions) {
            if (activity.checkSelfPermission(value) != PackageManager.PERMISSION_GRANTED) {
                denyPermissions.add(value);
            }
        }
        return denyPermissions;
    }

    /**
     * 获取所有权限
     * author LH
     * data 2016/7/27 13:37
     */
    @TargetApi(value = Build.VERSION_CODES.M)
    public void requestPermissions(Activity activity, int requestCode, PermissionCallBack permissionCallBack) {
        if (mListPermissions == null) {
            mListPermissions = new ArrayList<String>();
            addAllPermissions(mListPermissions);
        }
        if (!isOverMarshmallow()) {
            return;
        }
        mListPermissions = findDeniedPermissions(activity, mListPermissions);
        if (mListPermissions != null && mListPermissions.size() > 0) {
            activity.requestPermissions(mListPermissions.toArray(new String[mListPermissions.size()]),
                    requestCode);
        } else {
            permissionCallBack.onPermissionSuccess();
        }
    }

    public void requestResult(Activity activity, String[] permissions, int[] grantResults, PermissionCallBack permissionCallBack) {
        mListPermissions = new ArrayList<String>();
        ArrayList<String> noPermissions = new ArrayList<String>();
        ArrayList<String> rejectPermissons = new ArrayList<String>();
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                if (isOverMarshmallow()) {
                    boolean isShould = activity.shouldShowRequestPermissionRationale(permissions[i]);
                    mListPermissions.add(permissions[i]);
                    if (isShould) {
                        noPermissions.add(permissions[i]);
                    } else {
                        rejectPermissons.add(permissions[i]);
                    }
                }
            }
        }

        if (noPermissions.size() > 0) {
            permissionCallBack.onPermissionFail();
        } else if (rejectPermissons.size() > 0) {
            ArrayList<String> permissonsList = new ArrayList<String>();
            for (int i = 0; i < rejectPermissons.size(); i++) {
                String strPermissons = rejectPermissons.get(i);
                if (PERMISSIONS_STORAGE.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_storage));
                } else if (PERMISSIONS_ACCOUNTS.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_accounts));
                } else if (PERMISSIONS_PHONE.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_phone));
                } else if (PERMISSIONS_LOCATION.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_location));
                } else if (PERMISSIONS_AUDIO.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_audio));
                }
            }
            String strPermissons = permissonsList.toString();
            strPermissons = strPermissons.replace("[", "");
            strPermissons = strPermissons.replace("]", "");
            strPermissons = strPermissons.replace(",", "、");
            String strAppName = activity.getString(R.string.app_name);
            String strMessage = activity.getString(R.string.permission_message);
            strMessage = String.format(strMessage, strAppName, strPermissons, "\"");
            permissionCallBack.onPermissionReject(strMessage);

        } else {
            permissionCallBack.onPermissionSuccess();
        }
    }

    public interface PermissionCallBack {
        void onPermissionSuccess();

        void onPermissionReject(String strMessage);

        void onPermissionFail();
    }
}


 
  
 调用方法(放在第一个Activity或者Fragment中), 
  使用方法如下: 
  

  1. <pre name="code" class="java">/** 
  2.  * Created by LH on 2016/9/4. 
  3.  */  
  4. public class PermissionActivity extends AppCompatActivity implements PermissionUtil.PermissionCallBack {  
  5.     protected PermissionUtil mPermissionUtil;  
  6.     private static final int PERMISSION_CODE = 999;  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {  
  9.         super.onCreate(savedInstanceState, persistentState);  
  10.         mPermissionUtil = PermissionUtil.getInstance();  
  11.         mPermissionUtil.requestPermissions(this, PERMISSION_CODE, this);  
  12.     }  
  13.     @Override  
  14.     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {  
  15.         mPermissionUtil.requestResult(this, permissions, grantResults, this);  
  16.     }  
  17.   
  18.     @Override  
  19.     public void onPermissionSuccess() {  
  20.         initOperate();  
  21.     }  
  22.   
  23.     @Override  
  24.     public void onPermissionReject(String strMessage) {  
  25.         DialogShowUtils.showPermissionAlertDialog(this, strMessage, mCancelListener, mOkListener);  
  26.     }  
  27.   
  28.     private DialogShowUtils.PermissionDialogCancelListener mCancelListener = new DialogShowUtils.PermissionDialogCancelListener() {  
  29.   
  30.         @Override  
  31.         public void onCancelPressed() {  
  32.             finishAllActivity();  
  33.         }  
  34.     };  
  35.     private DialogShowUtils.PermissionDialogOKListener mOkListener = new DialogShowUtils.PermissionDialogOKListener() {  
  36.         @Override  
  37.         public void onOKPressed() {  
  38.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
  39.                 if (!Settings.System.canWrite(PermissionActivity.this)) {  
  40.                     Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
  41.                     intent.setData(Uri.parse("package:" + getPackageName()));  
  42.                     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  43.                     startActivity(intent);  
  44.                 }  
  45.             }  
  46.         }  
  47.     };  
  48.     @Override  
  49.     public void onPermissionFail() {  
  50.         mPermissionUtil.requestPermissions(this, PERMISSION_CODE,this);  
  51.     }  
  52. }  
<pre name="code" class="java">/**
 * Created by LH on 2016/9/4.
 */
public class PermissionActivity extends AppCompatActivity implements PermissionUtil.PermissionCallBack {
    protected PermissionUtil mPermissionUtil;
    private static final int PERMISSION_CODE = 999;
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        mPermissionUtil = PermissionUtil.getInstance();
        mPermissionUtil.requestPermissions(this, PERMISSION_CODE, this);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        mPermissionUtil.requestResult(this, permissions, grantResults, this);
    }

    @Override
    public void onPermissionSuccess() {
        initOperate();
    }

    @Override
    public void onPermissionReject(String strMessage) {
        DialogShowUtils.showPermissionAlertDialog(this, strMessage, mCancelListener, mOkListener);
    }

    private DialogShowUtils.PermissionDialogCancelListener mCancelListener = new DialogShowUtils.PermissionDialogCancelListener() {

        @Override
        public void onCancelPressed() {
            finishAllActivity();
        }
    };
    private DialogShowUtils.PermissionDialogOKListener mOkListener = new DialogShowUtils.PermissionDialogOKListener() {
        @Override
        public void onOKPressed() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.System.canWrite(PermissionActivity.this)) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }
        }
    };
    @Override
    public void onPermissionFail() {
        mPermissionUtil.requestPermissions(this, PERMISSION_CODE,this);
    }
}
 需要注意的是工具类中权限数组要严格放入 
  Dangerous Permission。不能放入 
  Normal Permissions 
  

详情请参考:http://blog.csdn.NET/lmj623565791/article/details/50709663


发布了30 篇原创文章 · 获赞 13 · 访问量 11万+

首先上工具类

  1. <pre name="code" class="java"><pre name="code" class="java">/** 
  2.  * Created by LH on 2016/7/27. 
  3.  */  
  4. public class PermissionUtil {  
  5.     private static PermissionUtil permissionUtil = null;  
  6.     private static List<String> mListPermissions;  
  7.     private static final String PERMISSIONS_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;  
  8.     private static final String PERMISSIONS_PHONE = Manifest.permission.READ_PHONE_STATE;  
  9.     private static final String PERMISSIONS_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;  
  10.     private static final String PERMISSIONS_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;  
  11.     private static final String PERMISSIONS_AUDIO = Manifest.permission.RECORD_AUDIO;  
  12.   
  13.     /** 
  14.      * 添加权限 
  15.      * author LH 
  16.      * data 2016/7/27 11:27 
  17.      */  
  18.     private void addAllPermissions(List<String> mListPermissions) {  
  19.         mListPermissions.add(PERMISSIONS_STORAGE);  
  20.         mListPermissions.add(PERMISSIONS_PHONE);  
  21.         mListPermissions.add(PERMISSIONS_ACCOUNTS);  
  22.         mListPermissions.add(PERMISSIONS_LOCATION);  
  23.         mListPermissions.add(PERMISSIONS_AUDIO);  
  24.     }  
  25.   
  26.     /** 
  27.      * 单例模式初始化 
  28.      * author LH 
  29.      * data 2016/7/27 11:27 
  30.      */  
  31.     public static PermissionUtil getInstance() {  
  32.         if (permissionUtil == null) {  
  33.             permissionUtil = new PermissionUtil();  
  34.         }  
  35.         return permissionUtil;  
  36.     }  
  37.   
  38.     /** 
  39.      * 判断当前为M以上版本 
  40.      * author LH 
  41.      * data 2016/7/27 11:29 
  42.      */  
  43.     public boolean isOverMarshmallow() {  
  44.         return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;  
  45.     }  
  46.   
  47.     /** 
  48.      * 获得没有授权的权限 
  49.      * author LH 
  50.      * data 2016/7/27 11:46 
  51.      */  
  52.     @TargetApi(value = Build.VERSION_CODES.M)  
  53.     public List<String> findDeniedPermissions(Activity activity, List<String> permissions) {  
  54.         List<String> denyPermissions = new ArrayList<>();  
  55.         for (String value : permissions) {  
  56.             if (activity.checkSelfPermission(value) != PackageManager.PERMISSION_GRANTED) {  
  57.                 denyPermissions.add(value);  
  58.             }  
  59.         }  
  60.         return denyPermissions;  
  61.     }  
  62.   
  63.     /** 
  64.      * 获取所有权限 
  65.      * author LH 
  66.      * data 2016/7/27 13:37 
  67.      */  
  68.     @TargetApi(value = Build.VERSION_CODES.M)  
  69.     public void requestPermissions(Activity activity, int requestCode, PermissionCallBack permissionCallBack) {  
  70.         if (mListPermissions == null) {  
  71.             mListPermissions = new ArrayList<String>();  
  72.             addAllPermissions(mListPermissions);  
  73.         }  
  74.         if (!isOverMarshmallow()) {  
  75.             return;  
  76.         }  
  77.         mListPermissions = findDeniedPermissions(activity, mListPermissions);  
  78.         if (mListPermissions != null && mListPermissions.size() > 0) {  
  79.             activity.requestPermissions(mListPermissions.toArray(new String[mListPermissions.size()]),  
  80.                     requestCode);  
  81.         } else {  
  82.             permissionCallBack.onPermissionSuccess();  
  83.         }  
  84.     }  
  85.   
  86.     public void requestResult(Activity activity, String[] permissions, int[] grantResults, PermissionCallBack permissionCallBack) {  
  87.         mListPermissions = new ArrayList<String>();  
  88.         ArrayList<String> noPermissions = new ArrayList<String>();  
  89.         ArrayList<String> rejectPermissons = new ArrayList<String>();  
  90.         for (int i = 0; i < grantResults.length; i++) {  
  91.             if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {  
  92.                 if (isOverMarshmallow()) {  
  93.                     boolean isShould = activity.shouldShowRequestPermissionRationale(permissions[i]);  
  94.                     mListPermissions.add(permissions[i]);  
  95.                     if (isShould) {  
  96.                         noPermissions.add(permissions[i]);  
  97.                     } else {  
  98.                         rejectPermissons.add(permissions[i]);  
  99.                     }  
  100.                 }  
  101.             }  
  102.         }  
  103.   
  104.         if (noPermissions.size() > 0) {  
  105.             permissionCallBack.onPermissionFail();  
  106.         } else if (rejectPermissons.size() > 0) {  
  107.             ArrayList<String> permissonsList = new ArrayList<String>();  
  108.             for (int i = 0; i < rejectPermissons.size(); i++) {  
  109.                 String strPermissons = rejectPermissons.get(i);  
  110.                 if (PERMISSIONS_STORAGE.equals(strPermissons)) {  
  111.                     permissonsList.add(activity.getString(R.string.permission_storage));  
  112.                 } else if (PERMISSIONS_ACCOUNTS.equals(strPermissons)) {  
  113.                     permissonsList.add(activity.getString(R.string.permission_accounts));  
  114.                 } else if (PERMISSIONS_PHONE.equals(strPermissons)) {  
  115.                     permissonsList.add(activity.getString(R.string.permission_phone));  
  116.                 } else if (PERMISSIONS_LOCATION.equals(strPermissons)) {  
  117.                     permissonsList.add(activity.getString(R.string.permission_location));  
  118.                 } else if (PERMISSIONS_AUDIO.equals(strPermissons)) {  
  119.                     permissonsList.add(activity.getString(R.string.permission_audio));  
  120.                 }  
  121.             }  
  122.             String strPermissons = permissonsList.toString();  
  123.             strPermissons = strPermissons.replace("[""");  
  124.             strPermissons = strPermissons.replace("]""");  
  125.             strPermissons = strPermissons.replace(",""、");  
  126.             String strAppName = activity.getString(R.string.app_name);  
  127.             String strMessage = activity.getString(R.string.permission_message);  
  128.             strMessage = String.format(strMessage, strAppName, strPermissons, "\"");  
  129.             permissionCallBack.onPermissionReject(strMessage);  
  130.   
  131.         } else {  
  132.             permissionCallBack.onPermissionSuccess();  
  133.         }  
  134.     }  
  135.   
  136.     public interface PermissionCallBack {  
  137.         void onPermissionSuccess();  
  138.   
  139.         void onPermissionReject(String strMessage);  
  140.   
  141.         void onPermissionFail();  
  142.     }  
  143. }  
<pre name="code" class="java"><pre name="code" class="java">/**
 * Created by LH on 2016/7/27.
 */
public class PermissionUtil {
    private static PermissionUtil permissionUtil = null;
    private static List<String> mListPermissions;
    private static final String PERMISSIONS_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
    private static final String PERMISSIONS_PHONE = Manifest.permission.READ_PHONE_STATE;
    private static final String PERMISSIONS_ACCOUNTS = Manifest.permission.GET_ACCOUNTS;
    private static final String PERMISSIONS_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
    private static final String PERMISSIONS_AUDIO = Manifest.permission.RECORD_AUDIO;

    /**
     * 添加权限
     * author LH
     * data 2016/7/27 11:27
     */
    private void addAllPermissions(List<String> mListPermissions) {
        mListPermissions.add(PERMISSIONS_STORAGE);
        mListPermissions.add(PERMISSIONS_PHONE);
        mListPermissions.add(PERMISSIONS_ACCOUNTS);
        mListPermissions.add(PERMISSIONS_LOCATION);
        mListPermissions.add(PERMISSIONS_AUDIO);
    }

    /**
     * 单例模式初始化
     * author LH
     * data 2016/7/27 11:27
     */
    public static PermissionUtil getInstance() {
        if (permissionUtil == null) {
            permissionUtil = new PermissionUtil();
        }
        return permissionUtil;
    }

    /**
     * 判断当前为M以上版本
     * author LH
     * data 2016/7/27 11:29
     */
    public boolean isOverMarshmallow() {
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;
    }

    /**
     * 获得没有授权的权限
     * author LH
     * data 2016/7/27 11:46
     */
    @TargetApi(value = Build.VERSION_CODES.M)
    public List<String> findDeniedPermissions(Activity activity, List<String> permissions) {
        List<String> denyPermissions = new ArrayList<>();
        for (String value : permissions) {
            if (activity.checkSelfPermission(value) != PackageManager.PERMISSION_GRANTED) {
                denyPermissions.add(value);
            }
        }
        return denyPermissions;
    }

    /**
     * 获取所有权限
     * author LH
     * data 2016/7/27 13:37
     */
    @TargetApi(value = Build.VERSION_CODES.M)
    public void requestPermissions(Activity activity, int requestCode, PermissionCallBack permissionCallBack) {
        if (mListPermissions == null) {
            mListPermissions = new ArrayList<String>();
            addAllPermissions(mListPermissions);
        }
        if (!isOverMarshmallow()) {
            return;
        }
        mListPermissions = findDeniedPermissions(activity, mListPermissions);
        if (mListPermissions != null && mListPermissions.size() > 0) {
            activity.requestPermissions(mListPermissions.toArray(new String[mListPermissions.size()]),
                    requestCode);
        } else {
            permissionCallBack.onPermissionSuccess();
        }
    }

    public void requestResult(Activity activity, String[] permissions, int[] grantResults, PermissionCallBack permissionCallBack) {
        mListPermissions = new ArrayList<String>();
        ArrayList<String> noPermissions = new ArrayList<String>();
        ArrayList<String> rejectPermissons = new ArrayList<String>();
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                if (isOverMarshmallow()) {
                    boolean isShould = activity.shouldShowRequestPermissionRationale(permissions[i]);
                    mListPermissions.add(permissions[i]);
                    if (isShould) {
                        noPermissions.add(permissions[i]);
                    } else {
                        rejectPermissons.add(permissions[i]);
                    }
                }
            }
        }

        if (noPermissions.size() > 0) {
            permissionCallBack.onPermissionFail();
        } else if (rejectPermissons.size() > 0) {
            ArrayList<String> permissonsList = new ArrayList<String>();
            for (int i = 0; i < rejectPermissons.size(); i++) {
                String strPermissons = rejectPermissons.get(i);
                if (PERMISSIONS_STORAGE.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_storage));
                } else if (PERMISSIONS_ACCOUNTS.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_accounts));
                } else if (PERMISSIONS_PHONE.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_phone));
                } else if (PERMISSIONS_LOCATION.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_location));
                } else if (PERMISSIONS_AUDIO.equals(strPermissons)) {
                    permissonsList.add(activity.getString(R.string.permission_audio));
                }
            }
            String strPermissons = permissonsList.toString();
            strPermissons = strPermissons.replace("[", "");
            strPermissons = strPermissons.replace("]", "");
            strPermissons = strPermissons.replace(",", "、");
            String strAppName = activity.getString(R.string.app_name);
            String strMessage = activity.getString(R.string.permission_message);
            strMessage = String.format(strMessage, strAppName, strPermissons, "\"");
            permissionCallBack.onPermissionReject(strMessage);

        } else {
            permissionCallBack.onPermissionSuccess();
        }
    }

    public interface PermissionCallBack {
        void onPermissionSuccess();

        void onPermissionReject(String strMessage);

        void onPermissionFail();
    }
}


 
 调用方法(放在第一个Activity或者Fragment中), 
使用方法如下: 

  1. <pre name="code" class="java">/** 
  2.  * Created by LH on 2016/9/4. 
  3.  */  
  4. public class PermissionActivity extends AppCompatActivity implements PermissionUtil.PermissionCallBack {  
  5.     protected PermissionUtil mPermissionUtil;  
  6.     private static final int PERMISSION_CODE = 999;  
  7.     @Override  
  8.     public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {  
  9.         super.onCreate(savedInstanceState, persistentState);  
  10.         mPermissionUtil = PermissionUtil.getInstance();  
  11.         mPermissionUtil.requestPermissions(this, PERMISSION_CODE, this);  
  12.     }  
  13.     @Override  
  14.     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {  
  15.         mPermissionUtil.requestResult(this, permissions, grantResults, this);  
  16.     }  
  17.   
  18.     @Override  
  19.     public void onPermissionSuccess() {  
  20.         initOperate();  
  21.     }  
  22.   
  23.     @Override  
  24.     public void onPermissionReject(String strMessage) {  
  25.         DialogShowUtils.showPermissionAlertDialog(this, strMessage, mCancelListener, mOkListener);  
  26.     }  
  27.   
  28.     private DialogShowUtils.PermissionDialogCancelListener mCancelListener = new DialogShowUtils.PermissionDialogCancelListener() {  
  29.   
  30.         @Override  
  31.         public void onCancelPressed() {  
  32.             finishAllActivity();  
  33.         }  
  34.     };  
  35.     private DialogShowUtils.PermissionDialogOKListener mOkListener = new DialogShowUtils.PermissionDialogOKListener() {  
  36.         @Override  
  37.         public void onOKPressed() {  
  38.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
  39.                 if (!Settings.System.canWrite(PermissionActivity.this)) {  
  40.                     Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);  
  41.                     intent.setData(Uri.parse("package:" + getPackageName()));  
  42.                     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  43.                     startActivity(intent);  
  44.                 }  
  45.             }  
  46.         }  
  47.     };  
  48.     @Override  
  49.     public void onPermissionFail() {  
  50.         mPermissionUtil.requestPermissions(this, PERMISSION_CODE,this);  
  51.     }  
  52. }  
<pre name="code" class="java">/**
 * Created by LH on 2016/9/4.
 */
public class PermissionActivity extends AppCompatActivity implements PermissionUtil.PermissionCallBack {
    protected PermissionUtil mPermissionUtil;
    private static final int PERMISSION_CODE = 999;
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        mPermissionUtil = PermissionUtil.getInstance();
        mPermissionUtil.requestPermissions(this, PERMISSION_CODE, this);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        mPermissionUtil.requestResult(this, permissions, grantResults, this);
    }

    @Override
    public void onPermissionSuccess() {
        initOperate();
    }

    @Override
    public void onPermissionReject(String strMessage) {
        DialogShowUtils.showPermissionAlertDialog(this, strMessage, mCancelListener, mOkListener);
    }

    private DialogShowUtils.PermissionDialogCancelListener mCancelListener = new DialogShowUtils.PermissionDialogCancelListener() {

        @Override
        public void onCancelPressed() {
            finishAllActivity();
        }
    };
    private DialogShowUtils.PermissionDialogOKListener mOkListener = new DialogShowUtils.PermissionDialogOKListener() {
        @Override
        public void onOKPressed() {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (!Settings.System.canWrite(PermissionActivity.this)) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(intent);
                }
            }
        }
    };
    @Override
    public void onPermissionFail() {
        mPermissionUtil.requestPermissions(this, PERMISSION_CODE,this);
    }
}
 需要注意的是工具类中权限数组要严格放入 
Dangerous Permission。不能放入 
Normal Permissions 

详情请参考:http://blog.csdn.NET/lmj623565791/article/details/50709663


猜你喜欢

转载自blog.csdn.net/wjr1949/article/details/77093324