Android 6.0 权限
来源:互联网 发布:淘宝子账户和主账户 编辑:程序博客网 时间:2024/06/05 18:21
新的权限机制更好的保护了用户的隐私,Google将权限分为两类,一类是Normal Permissions,这类权限一般不涉及用户隐私,是不需要用户进行授权的,比如手机震动、访问网络等;另一类是Dangerous Permission,一般是涉及到用户隐私的,需要用户进行授权,比如读取sdcard、访问通讯录等。
API的讲解就跟着申请权限步骤一起了:
1.在AndroidManifest文件中添加需要的权限。
这个步骤和我们之前的开发并没有什么变化,试图去申请一个没有声明的权限可能会导致程序崩溃。
2.检查权限
if (ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED)
{
}else
{
//}
这里涉及到一个API,ContextCompat.checkSelfPermission
,主要用于检测某个权限是否已经被授予,方法返回值为PackageManager.PERMISSION_DENIED
或者PackageManager.PERMISSION_GRANTED
。当返回DENIED就需要进行申请授权了
3.申请授权
ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MY_PERMISSIONS_REQUEST_READ_CONTACTS);
该方法是异步的,第一个参数是Context;第二个参数是需要申请的权限的字符串数组;第三个参数为requestCode,主要用于回调的时候检测。可以从方法名requestPermissions
以及第二个参数看出,是支持一次性申请多个权限的,系统会通过对话框逐一询问用户是否授权。
4.处理权限申请回调
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; } }}
ok,对于权限的申请结果,首先验证requestCode定位到你的申请,然后验证grantResults对应于申请的结果,这里的数组对应于申请时的第二个权限字符串数组。如果你同时申请两个权限,那么grantResults的length就为2,分别记录你两个权限的申请结果。如果申请成功,就可以做你的事情了~
当然,到此我们的权限申请的不走,基本介绍就如上述。不过还有个API值得提一下:
// Should we show an explanation?if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity, Manifest.permission.READ_CONTACTS)) // Show an expanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user // sees the explanation, try again to request the permission.}
这个API主要用于给用户一个申请权限的解释,该方法只有在用户在上一次已经拒绝过你的这个权限申请。也就是说,用户已经拒绝一次了,你又弹个授权框,你需要给用户一个解释,为什么要授权,则使用该方法。
那么将上述几个步骤结合到一起就是:
public void testCall(View view) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, MY_PERMISSIONS_REQUEST_CALL_PHONE); }else { callPhone(); } } publicvoidcallPhone() { Intent intent =new Intent(Intent.ACTION_CALL); Uri data = Uri.parse("tel:" +"10086"); intent.setData(data); startActivity(intent); } @Override publicvoidonRequestPermissionsResult(int requestCode, String[] permissions,int[] grantResults) { if (requestCode == MY_PERMISSIONS_REQUEST_CALL_PHONE) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { callPhone(); }else { // Permission Denied Toast.makeText(MainActivity.this,"Permission Denied", Toast.LENGTH_SHORT).show(); } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }}
http://download.csdn.net/download/qqlibo205/9956921 源码下载
- android 6.0 权限获取
- android 6.0权限问题
- Android 6.0 权限问题
- android 6.0权限管理
- Android 6.0权限管理
- android 6.0权限请求
- Android 6.0权限问题
- Android 6.0权限管理
- android 6.0权限管理
- android 6.0 权限
- Android 6.0权限模型
- android 6.0 权限授权
- android 6.0 权限
- android 6.0 权限
- Android 6.0权限问题
- android 6.0权限申请
- Android 6.0 申请权限
- Android 6.0 权限管理
- Caffe 学习——训练和测试自己的图片
- H5 2D渲染引擎—Pixi.js简介及小demo
- UVA 514 Rails(模拟|栈)
- chapter11_1图片加法
- 更高的标准才会有更好的选择
- Android 6.0 权限
- 高并发基础之Mq实现(五)
- HTTPS和HTTP的区别
- 微信分享功能
- 也来谈谈IT培训
- Windows上安装MySQL
- soj3366: Watering Hole_最小生成树Prim
- mysql安装教程(zip,和msi)
- COM组件原理