一、正常的使用方法
如果应用具有此权限,方法将返回PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。
如果应用不具有此权限,方法将返回PERMISSION_DENIED,且应用必须明确向用户要求权限。
//检查权限
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
Log.e("--------->", "没有权限");
//申请授权
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
} else {
Log.e("--------->", "已经被授权");
}
授权回调
//处理权限申请回调(写在Activity中)
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 1: {
// 授权被允许
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("-------->", "授权请求被允许");
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
Log.e("-------->", "授权请求被拒绝");
}
return;
}
}
}
二、onRequestPermissionsResult回调不执行
有的时候我们可能在fragment中去检查权限、申请权限,自然就认为回调也就写在fragment中了,而且写了之后也没有报任何错。这也就是为什么回调方法不执行的原因,所以我们把这个回调移到这个Fragment所依附的那个Activity,就可以顺利执行啦。(注意,我这里说的Fragment是v4包下的)
参考 Android M Permissions: onRequestPermissionsResult() not being called