关于Android 6.0后权限问题

  • 在应用系统大于等于6.0的手机上面,明明已经在AndroidManifest.xml中配置了权限,但是就是没有作用。因为Android6.0后需要动态的获取权限。就是当你需要这个权限的时候,需要手机给用户一个提示选择是否同意开启这个权限。
  • 看到网上有很多关于这方面的文章看起来好像很麻烦似的,其实动态获取权限就那几行代码就可以搞定。
  • 我在这里大概的初步的展示一下使用到的关键点,方便新手初步的使用与了解。(想要详细的了解的的建议阅读官方文档,不需要担心麻烦,也是比较简洁明了的)
首先需要你将你想要获取的权限在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);
       //申请动态获取权限之后回有一个回调的方法,如果用户同意的话,
           //  就执行下一步的方法。在这里需要强调的是这个回调是异步的执行的下一步的方法一定要写在获取权限成功的逻辑里面,
           //不然会调用与代码不同步
    }


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

进一步想要了解的朋友可以去http://blog.csdn.net/lmj623565791/article/details/50709663。 个人认为讲解的比较详细。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值