在Android 6.0(API 级别 23)
之后,Android
开发团队加入了运行时权限功能。也就是说用户在安装这个软件的时候不需要一次性授权所有申请的权限,而是在使用过程中动态授权。
当然,不是所有的权限都需要在运行时动态申请,因为这样对用户来讲不友好。故而将权限分为了两大类,分别是普通权限、危险权限。
对于普通权限,系统会自动帮我们进行授权,对于危险权限,则需要用户手动授权。危险权限一般指可能会触及用户隐私或者对设备的安全性造成影响的权限。
在Android
中存在上百种权限,但除了危险权限外,剩下的大多数都是普通权限。
每次当处理权限的时候,可以先看是否是危险权限,如果是就需要在代码中进行运行时权限处理;否则就直接在AndroidManifest.xml
文件中添加权限申明即可。比如:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
危险权限列表:
上图来源:Android 中的危险权限
案例,打电话:
<uses-permission android:name="android.permission.CALL_PHONE"/>
在Java
代码中需要动态申请权限:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//权限检查
if (ContextCompat.checkSelfPermission(TestActivity.this,
Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
//申请权限
ActivityCompat.requestPermissions(TestActivity.this,
new String[]{Manifest.permission.CALL_PHONE}, 1);
}
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086")); // smsto:10086
startActivity(intent);
}
});
Thanks