您的位置:首页 > 移动开发 > Android开发

Android 6.0 动态权限申请

2016-10-19 18:23 716 查看
在Android6.0中,引入了动态申请权限机制。 以前我们在申请权限的时候,都是写在了Manifest.xml里面。 安装的时候会有一堆提示申请权限的界面, Google 可能想到用户可能并不注意这些权限。 so~ 就迎来了 动态权限机制。请注意,

如果你使用了API 23以上, 然而并没有用代码处理权限问题。 那么你的程序将会 CRASH !!!

下面我们来看看到底哪些权限是需要动态申请的, 也称为危险权限。



以上这些权限不仅仅

要在Maninfest.xml里面处理。(如果不在Maninfest.xml注册权限,就动态申请权限,系统会crash) 还要在代码中处理, 如不处理。将会CRASH,  可把SDK 换到23 自行尝试。

下面我们来演示一个打电话的Demo.

当点击一个按钮的时候,我们检查权限

public void call(View v) {
//检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//进入到这里代表没有权限.
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);
} else {
callPhone();
}
}


如果有权限,那么直接调用callPhone()方法去打电话, 否则就申请权限。 如果进入了申请权限代码,则会弹出一个弹框,让用户选择是否授

这里会有个回调方法,在FragmentActivity与Activity里都有该方法
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case REQUEST_CODE:
if(grantResults.length >0 &&grantResults[0]==PackageManager.PERMISSION_GRANTED){
//用户同意授权
callPhone();
}else{
//用户拒绝授权
}
break;
}
}


如果同意授权,那么会进入到第一个if 最后走进callPhone(), 如果点击取消。 那么说明用户拒绝了该权限。

这里还有个小问题,如果用户点击了不在提醒, 并拒绝之后。  那么下次点击该触发打电话的按钮 就会没有任何反应,体验非常的不好。 我们可以做如下处理。
public void call(View v) {
//检查权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED) {
//进入到这里代表没有权限.
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CALL_PHONE)){
//已经禁止提示了
Toast.makeText(MainActivity.this, "您已禁止该权限,需要重新开启。", Toast.LENGTH_SHORT).show();
}else{
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_CODE);
}
} else {
callPhone();
}
}


这样的话,如果没有改权限。 会检查是否禁止提示, 如果禁止提示了, 我们给它一个Toast提示。

还说上一个非常好的消息, 现在 在AS中, 如果我们用了危险权限 ,那么系统是会给提示的。 并且会生成相应代码哦~  是不是非常的屌~~~

关于6.0动态权限就先介绍到这里,如想要更详细的资料, 请认准官网。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: