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

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

作者: 云淡风轻_935f | 来源:发表于2018-11-06 19:35 被阅读0次

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

    最近开发安卓的时候,发现调用摄像头一直出错,导致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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/ajqpxqtx.html