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

首先上工具类

<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中), 
使用方法如下: 

<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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值