Android 6.0 app的权限申请

本文介绍在Android 6.0及更高版本中如何处理运行时权限请求,特别是针对WRITE_EXTERNAL_STORAGE权限的具体实现方法。

作者:Henry

 

android 6.0版本之后,系统不会在软件安装的时候就赋予该app所有其申请的权限,对于一些危险级别的权限,app需要在运行时一个一个询问用户授予权限。那么问题来了,是不是所有以前发布的app都会出现问题呢?答案是不会,只有那些targetSdkVersion 设置为2323以上的应用才会出现异常。以下以笔者开发的视频app为例来说明:


是不是所有权限都需要去进行特殊处理呢?不是,只有那些危险级别的权限才需要,android开发者官网有相关描述:

 

http://developer.android.com/training/permissions/requesting.html

http://developer.android.com/guide/topics/security/permissions.html


所以仔细去看看自己的app,对照列表,如果有需要申请其中的一个权限,就需要进行特殊操作。还有一个比较人性的地方就是如果同一组的任何一个权限被授权了,其他权限也自动被授权。例如,一旦WRITE_EXTERNAL_STORAGE被授权了,app也有READ_EXTERNAL_STORAGE权限了。

接着下一步当然就是要修改代码了,因视频程序需要使用到外部存取空间, 因此需要申请WRITE_EXTERNAL_STORAGE权限, 所以在执行之前我们需要进行特殊处理

inthasWriteContactsPermission =checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);

if(hasWriteContactsPermission !=PackageManager.PERMISSION_GRANTED) {

        requestPermissions(newString[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

                CODE_FOR_WRITE_PERMISSION);

    return;

 

写完这段代码之后,就会出现如下系统dialog, 如上图所示

 

紧接着就需要去处理DENYALLOW的回调了,重写onRequestPermissionsResult函数:

@Override

publicvoidonRequestPermissionsResult(intrequestCode,String[] permissions, int[] grantResults) {

    if(requestCode ==CODE_FOR_WRITE_PERMISSION){

        if(permissions[0].equals(Manifest.permission.WRITE_EXTERNAL_STORAGE)

            &&grantResults[0]== PackageManager.PERMISSION_GRANTED){

            //用户同意使用

            

        }else{

            //用户不同意,自行处理即可

            finish();

        }

    }

好了,这样就算是适配完成了。

 

 


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值