此博客为学习Android开发的笔记型博客,若有不妥或补充之处希望各位大神给予指正
Android权限
Android权限机制
Android权限分为普通权限和危险权限 对于普通权限,一般系统会自动帮我们授权,但对于危险权限需要用户手动授权。 下面是Android中所有的危险权限: 其他表中没有列出的权限就全都是普通权限。 Android中系统完整的权限列表:http://developer.android.com/reference/android/Manifest.permission.html
在程序运行时申请权限
在这里我们模拟点击按钮后,呼叫10086。(由于我们使用的是虚拟机所以不会真的呼出去的,不会给他人造成不便,这点请放心)
1.在配置文件中声明权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
2.给button添加事件: 首先我们检测权限是否已被授权:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (ContextCompat.checkSelfPermission(FirstActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(FirstActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
call();
}
}
});
使用ContextCompat.checkSelfPermission()方法,传入两个参数:Context 和所需要的权限。
Manifest.permission.CALL_PHONE为拨号权限的常量。 同理,PackageManager.PERMISSION_GRANTED也是常量,是已授权的常量。
这里当没有授权时,调用ActivityCompat.requestPermissions()方法申请权限,传入三个参数:Context,申请权限列表(String[ ]),请求码(唯一即可)。
3.授权和回调onRequestPermissionsResult 方法
然后系统会弹出一个申请权限的对话框,无论是否授权,都会回调onRequestPermissionsResult 方法,里面有三个参数:请求码,权限列表(String[ ]),权限的处理结果(int[ ])
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case 1:
if(grantResults[0]==PackageManager.PERMISSION_GRANTED){
call();
}else{
Toast.makeText(FirstActivity.this,"You denied the permission",Toast.LENGTH_SHORT).show();
}
break;
default:
}
}
4.执行呼号操作
void call() {
try {
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:10086"));
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
return;
}
startActivity(intent);
}catch (Exception e){
e.printStackTrace();
}
}
访问其他程序中的数据
|