Android在6.0之后加入了运行时权限,权限分为一般权限和危险权限,Android系统总共有百余种权限,那么怎么区分哪些是一般权限哪些是危险权限呢,其实危险权限并不是很多,总共9组24个,这里,这里是按组分的,只要申请了某一组的其中一个权限,那么就拥有了整组的权限。
一:哪些是危险权限
下图是所有的危险权限,共9组24个
二:具体使用
2.1、检查权限
int result = ActivityCompat
.checkSelfPermission(this, Manifest
.permission.WRITE_EXTERNAL_STORAGE)
这里有两个参数,第一个是Context没什么可说的,第二个表示具体哪一个权限,并且有一个int型的返回值,返回值有两个结果,一个是PackageManager.PERMISSION_DENIED表示权限被拒绝,另一个是PackageManager.PERMISSION_GRANTED,表示用户允许了你申请该权限。
2.2、申请权限
ActivityCompat.requestPermissions(
this, permissions, REQUESTCODE);
这里有三个参数,第一个Context,第二个是一个String类型的数组,里面放具体你要申请的权限,第三个是请求码,只要是一个唯一值就可以了。
2.3、处理申请权限的回调
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[
0] != PermissionChecker.PERMISSION_GRANTED) {
Toast.makeText(
this,
"未申请权限将会影响您的正常使用", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(
this,
"授权成功", Toast.LENGTH_SHORT).show();
}
}
}
三:完整例子
public class SplashActivity extends AppCompatActivity {
String[] permissions = {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE};
private static final int REQUESTCODE =
1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
applyPermission();
}
private void EnterHome() {
startActivity(
new Intent(
this, HomeActivity.class));
finish();
}
/**
* 检测及申请权限
*/
private void applyPermission() {
int result = ActivityCompat.checkSelfPermission(
this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (result != PermissionChecker.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this, permissions, REQUESTCODE);
}
}
/**
* 进入主页
*
* @param view
*/
public void goHome(View view) {
EnterHome();
}
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults[
0] != PermissionChecker.PERMISSION_GRANTED) {
Toast.makeText(
this,
"未申请权限将会影响您的正常使用", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(
this,
"授权成功", Toast.LENGTH_SHORT).show();
}
}
}