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.
当点击一个按钮的时候,我们检查权限
如果有权限,那么直接调用callPhone()方法去打电话, 否则就申请权限。 如果进入了申请权限代码,则会弹出一个弹框,让用户选择是否授
这里会有个回调方法,在FragmentActivity与Activity里都有该方法
如果同意授权,那么会进入到第一个if 最后走进callPhone(), 如果点击取消。 那么说明用户拒绝了该权限。
这里还有个小问题,如果用户点击了不在提醒, 并拒绝之后。 那么下次点击该触发打电话的按钮 就会没有任何反应,体验非常的不好。 我们可以做如下处理。
这样的话,如果没有改权限。 会检查是否禁止提示, 如果禁止提示了, 我们给它一个Toast提示。
还说上一个非常好的消息, 现在 在AS中, 如果我们用了危险权限 ,那么系统是会给提示的。 并且会生成相应代码哦~ 是不是非常的屌~~~
关于6.0动态权限就先介绍到这里,如想要更详细的资料, 请认准官网。
如果你使用了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动态权限就先介绍到这里,如想要更详细的资料, 请认准官网。
相关文章推荐
- 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, 7.0之动态申请权限完美解决方案
- Android 6.0 动态权限申请
- android拨打电话崩溃6.0以上实时动态权限申请
- Android 6.0权限动态申请
- Android 6.0 动态权限申请
- Android 6.0动态申请权限
- Android 6.0动态权限申请