[Android Studio]申请摄像头权限失败

转载来源:安卓开发调用摄像头一直失败的原因及解决(权限问题)

安卓开发调用摄像头一直失败的原因及解决(权限问题)

最近开发安卓的时候,发现调用摄像头一直出错,导致APP直接崩溃,

错误代码:java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/DCIM/20181106191203.jpg} (has extras) } from ProcessRecord{2db2ead 2049:com.example.kkk.imagetest/u0a295} (pid=2049, uid=10295) with revoked permission android.permission.CAMERA

查询了网上的一些博客,发现大多数没有答到点子上,有的人直接把自己的代码全盘照搬,没有参考价值。现在发现原因如下:

1.Android 6.0之后权限需求的变动

以前的安卓权限都在manifest中一次申请,终身可用,到了安卓6.0(targetSdkVersion to 23)之后,为了防止权限滥用,Google就采取了一些措施:

a.对于targetSdkVersion低于23的APP,使用旧有规则:用户在安装的时候不得不接受所有权限(APP自带),安装后app就有了那些权限。

b.对于targetSdkVersion大于等于23的APP,使用新规则:app不得不在运行时一个一个询问用户授予权限。另外,用户也可以随时在设置里取消已经授权的权限。

2.知道了原因,解决方案:

已经在Manifest中配置了权限信息的情况下,在打开摄像头之前,加上这样一段代码:ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},1);(询问用户授予权限)

解释:ActivityCompat.requestPermissions(),这个方法接收三个参数,分别是Activity的实例、String数组(manifest中的请求权限)、请求码

注意:第一个参数需要activity的实例,我的MainActivity继承的是默认的APPCompatActivity,所以要加上".this"。

备注:这是最为直接、简单的方法,会显得有些简陋,实际开发中会使用更加完善的方法,但是我觉得这对于初学者是最好理解的,

简洁即是美。2018/11/6

作者:云淡风轻_935f
链接:https://www.jianshu.com/p/ddf87ce7afef
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值