Android 6.0 app的权限申请

来源:互联网 发布:淘宝怎么催客人下订单 编辑:程序博客网 时间:2024/05/22 02:12

作者: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();

        }

    }

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

 

 


0 0
原创粉丝点击