Android应用开发:Android 6.0后权限问题详情介绍
小标 2018-05-23 来源 : 阅读 657 评论 0

摘要:在Android应用开发中,在应用系统大于等于6.0的手机上面,明明已经在AndroidManifest.xml中配置了权限,但是就是没有作用。因为Android6.0后需要动态的获取权限。就是当你需要这个权限的时候,需要手机给用户一个提示选择是否同意开启这个权限。希望对大家学习Android应用开发有所帮助。

在Android应用开发中,在应用系统大于等于6.0的手机上面,明明已经在AndroidManifest.xml中配置了权限,但是就是没有作用。因为Android6.0后需要动态的获取权限。就是当你需要这个权限的时候,需要手机给用户一个提示选择是否同意开启这个权限。希望对大家学习Android应用开发有所帮助。

看到网上有很多关于这方面的文章看起来好像很麻烦似的,其实动态获取权限就那几行代码就可以搞定。

我在这里大概的初步的展示一下使用到的关键点,方便新手初步的使用与了解。(想要详细的了解的的建议阅读官方文档,不需要担心麻烦,也是比较简洁明了的)

首先需要你将你想要获取的权限在AndroidManifest配置中写出来,之后如果你手机使Android 6.0以上还需要你通过代码去动态获取,下面给出一些主要代码。

    /**
     * 获取权限需要调用的方法 权限一旦获取后 不需要重复获取。
     */
    public boolean getPression() {
         //当版本为Android6.0以上才需要考虑的问题
//首先判断手机的SDK版本是否大于等于23,如果小于的话就不需要动态的去申请权限,让用户有更好的体验。
        if (Build.VERSION.SDK_INT >= 23) {
            //设置你所需要检查是否开启的权限
            int checkPermission =
                    ContextCompat.checkSelfPermission(this,
                            Manifest.permission.WRITE_EXTERNAL_STORAGE);
      /*      // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                    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.
            } else {
                // No explanation needed, we can request the permission.
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.READ_CONTACTS},
                        MY_PERMISSIONS_REQUEST_READ_CONTACTS);
                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int constant. The callback method gets the
                // result of the request.
            }
            */
    //判断权限是否获取
            if (checkPermission != PackageManager.PERMISSION_GRANTED) {
                ToastUtils.showShort(getApplicationContext(), getString(R.string.pression_tip));
           //申请需要的权限 这里为读取写入 与相机                                  
                ActivityCompat.requestPermissions(this,
                        new String[]
                                {Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                Manifest.permission.READ_EXTERNAL_STORAGE,
                                Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS,
                                Manifest.permission.CAMERA}, 1);
                                //这个地方的一为onRequestPermissionsResult中
                                //会显示的requestCode请求码 可以用于判断
                return false;
            } else {
                return true;
            }
        }
        return true;
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       //申请动态获取权限之后回有一个回调的方法,如果用户同意的话,
           //  就执行下一步的方法。在这里需要强调的是这个回调是异步的执行的下一步的方法一定要写在获取权限成功的逻辑里面,
           //不然会调用与代码不同步
    }

在你需要使用到权限的地方调用此方法,既可以轻松解决。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发Android频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程