权限
Android权限起到什么作用
- 首先Android系统它是一个开放的系统,能够允许各种各样的应用程序在上面运行,比如一个天气应用需要获取你的位置信息,然后给我们提供准确的天气预报,一个相机需要使用摄像头,你、以便提供拍照功能;一个通讯录应用需要访问联系人信息,以便可以联系到家人朋友,而这些应用需要完成这些功能就需要获得到相应的权限,但是权限也不是随便乱给的,对app随便乱给权限可能会造成用户泄露隐私安全和数据安全,所以权限系统是很重要的,它主要用于保护用户的隐私和数据安全,防止恶意应用程序访问和滥用用户的敏感数据等等。
权限类型
Android 将权限分为不同的类型,包括安装权限、运行时权限和特殊权限。每种权限类型都表示了当系统授予应用该权限后,应用可以访问的受限数据范围以及应用可以执行的受限操作范围。
1.安装权限:安装时权限在应用安装的时候就被系统自动授予,不需要用户进行手动操作。这类权限通常涉及的是应用的正常运行,比如让应用访问网络,或者让应用振动手机等。一般应用商店中会在用户查看应用详情页面时向其显示安装时权限通知
2.运行时权限:运行时权限比较敏感一点了,它是指应用运行的过程中,当应用需要使用某项特定功能时,系统会弹出窗口询问用户是否授予这项权限。这类权限通常涉及的是用户的隐私,比如让应用访问你的相册、位置信息、联系人等。因此需要先在应用中请求运行时权限然后才能访问受限数据或操作
3.特殊权限:特殊权限涉及的是一些特殊的功能,比如悬浮窗、通知使用权、系统设置等。应用需要这些权限时,系统会跳转到系统设置页面,让用户在那里手动授予这些权限。
运行时权限的使用
我们先看代码:
public class PermissionActivity extends AppCompatActivity {
private Button bt;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission);
bt = findViewById(R.id.bt);
bt.setOnClickListener(view -> {
if (ContextCompat.checkSelfPermission(PermissionActivity.this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(PermissionActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
call();
}
});
}
private void call() {
try {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
} catch (SecurityException e) {
e.printStackTrace();
}
}
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
call();
} else {
Toast.makeText(this, "你拒绝的这个权限", Toast.LENGTH_SHORT).show();
}
}
}
}
这个 Activity 主要用于请求电话拨打权限并拨打电话,在onCreate方法中,通过点击bt控件来申请获取权限,首先在if中会检查当前应用是否已经获得了拨打电话的权限。如果没有,就会执行大括号内的代码,会弹出一个对话框,询问用户是否授予应用拨打电话的权限.如果已经有权限了就会直接调用call()方法执行
onRequestPermissionsResult方法是处理权限请求结果的方法,当权限请求完成后,这个方法会被调用。在这个方法中,首先调用了父类的同名方法,然后检查了请求代码和权限请求结果。如果权限被授予,就拨打电话,如果权限被拒绝,就显示一个 Toast 消息。