事实上自android6.0以来,这个检查权限一直很让人头痛。

之所以提到让人头痛,是因为并不是所有厂商都按照规矩来,比如小米,无论是否拒绝:

ContextCompat.checkSelfPermission()

使用这个方法获取的结果始终为通过。

最近找到了:
PermissionChecker.checkPermission(getContext().getApplicationContext(), 权限名,android.os.Process.myPid(),android.os.Process.myUid(), getPackageName());
经测试,兼容小米。

不用特地判断6.0以上,这个方法会自己识别。而且有些手机没到6.0系统也有权限识别(红米note2[自装5.0.1]),有些到6.0没有(Vivo Y67L),所以不要自己判断6.0以上,让这个方法判断。如果是询问状态,这个方法也会尽量先询问再判断。个别情况可能因手机厂商该系统的原因询问状态时判断为获取权限失败,那就直接告诉用户失败,让用户自己设置吧。