Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题

Posted HaiyuKing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题相关的知识,希望对你有一定的参考价值。

版权声明:本文为博主原创文章,未经博主允许不得转载。

正常情况下调用系统相机拍照: 
如果拍照后点击的是“确定”图标,返回的resultCode = -1(Activity.RESULT_OK); 
如果点击的是底部的“返回”键,返回的resultCode = 0(Activity.RESULT_CANCELED)。

简单的调用系统相机的写法:

//调用系统拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String photofileName = "IMG_" + new Date() + ".jpg";
String imgUrl = Environment.getExternalStorageDirectory() + File.separator + "tempWhy"+ File.separator + photofileName;//必须使用已经存在的文件夹tempWhy
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(imgUrl)));
//启动拍照的窗体。并注册 回调处理
startActivityForResult(intent, 1111);

返回时的处理

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        switch (requestCode) {
            //拍照功能
            case 1111:
                break;
        }
    }
}

那么,今天碰到的在android6.0机型上出现的调用系统相机拍照返回的resultCode的值始终等于0的问题,主要是由于以下两方面原因导致到:

一、没有实现运行时权限的处理 
当AndroidManifest.xml文件中的Android:targetSdkVersion值大于等于23的时候,此时必须要实现运行时权限的处理,因为向SD卡读写文件的权限——android.permission.WRITE_SETTINGS属于运行时权限。 
解决方案: 
方案一:将AndroidManifest.xml文件中的android:targetSdkVersion值修改为小于23 
方案二:添加运行时权限的处理

二、当指定拍照图片保存路径的时候,存储目录(文件夹)未创建 
解决方案:

调用系统相机拍照之前先创建存储目录

以上是关于Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题的主要内容,如果未能解决你的问题,请参考以下文章

Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)

安卓7.0拍照遇到 Uri暴露错误

android固定位置拍照,Android调用系统相机拍照并保存到指定位置

Android 默认相机崩溃

android 相机 怎么改变相机预览界面大小

Android 调用系统相机拍照后 添加文字水印