6.0发布到时候,权限管理这一块,是一个热点。官方文档也写的很详细了文档
- 在Manifests中申请权限。
- 检查系统版本
public boolean checkSDKVersion() {
return Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M;
}
- 检查是否有权限
public boolean hasPermission(String str) { if (checkSDKVersion()) return (checkSelfPermission(str) == PackageManager.PERMISSION_GRANTED); return true;}
- 是否显示权限说明
//在第一次安装的时候,这个方法会反悔false,因此你可以直接请求权限,如果用户以前拒绝过一个权限的请求,那么再次请求该权限的时候可以显示一个解释该请求用途的的信息。
boolean b = shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE); if (b) {//是否需要显示说明,,为什么需要给权限的对话框 Toast.makeText(this, "我就是要这个权限,你要给我", Toast.LENGTH_LONG).show(); } requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
- 回调处理
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
//请求标示
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//授权成功
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
//授权失败
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request }}
查看permission
adb shell pm list permissions -d -g
危险权限,分组查看