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 
方案二:添加运行时权限的处理

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

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

时间: 2024-12-29 07:11:31

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

Android7.0调用系统相机拍照、读取系统相册照片+CropImageView剪裁照片

Android手机拍照.剪裁,并非那么简单 简书地址:[我的简书–T9的第三个三角] 前言 项目中,基本都有用户自定义头像或自定义背景的功能,实现方法一般都是调用系统相机–拍照,或者系统相册–选择照片,然后进行剪裁,最终设为头像或背景. 而在Android6.0之后,需要动态获取权限,而且Android7.0之后,无法直接根据拍照返回的URI拿到图片,这是因为从安卓7.0开始,直接使用本地真实路径被认为是不安全的,会抛出FileUriExposedExCeption异常,本文就是基于这个功能去针

Android 调用系统相机拍照保存以及调用系统相册的方法

系统已经有的东西,如果我们没有新的需求的话,直接调用是最直接的.下面讲讲调用系统相机拍照并保存图片和如何调用系统相册的方法. 首先看看调用系统相机的核心方法: Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(camera, CAMERA); 相机返回的数据通过下面的回调方法取得,并处理: public static final int CAMERA  = 0x01; @Over

Android下载图片/调用系统相机拍照、显示并保存到本地

package com.example.testhttpget; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpEntity; import org.apache.

android调用系统相机拍照并保存在本地

import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Calendar; import java.util.Locale; import android.annotation.SuppressLint; import android.app.Activity; import an

Android调用系统相机拍照保存照片很小解决方案

保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, 1); 2. 保存照片 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {  // TODO Auto-generated method s

Android调用系统相机获取返回数据

由于项目需要调用相机,实现上传照片,例如微博,微信中功能.Android中可以非常轻松的调用系统相机,并返回Bitmap数据,但有一点不足,它返回的Bitmap尺寸很小,清晰度不够,这问题将稍后解决.下面通过代码演示. 1.界面布局 res/layout 定义一个简单布局,一个Button和ImageView,分别用于跳转系统相机Activity和显示系统相机返回数据. 1 <LinearLayout xmlns:android="http://schemas.android.com/ap

android 调用系统相机拍照 获取原图

好吧,为了这个问题又折腾了一整天.之前在网上找来的方法,如果在onActivityResult中直接用data.getData()的方式来生成bitmap,其实获取的是拍照生成的缩略图!看看尺寸就知道了.如果要获取原图,还需要一番折腾(特别是对于手里这个Samsung i9000)——之前朋友在不同的机型上使用的方法在我这里一直报错,且属于那种uncaught的错误-.- 话说回来,具体的折腾方法如下(如果不幸你看到了,希望不要“折疼了”): 在拍照的出发按钮的点击事件中写入如下代码: toCa

安卓开发之-调用系统相机拍照应注意要点。

(一)调用相机拍照保存至指定文件夹,intent.putExtra(file)可将拍到的照片直接保存到文件夹 但此方法不可用于拍摄视频,同样的在摄像时,如果传入路径的话,会出现画面卡死不动,而同时在传入的路径下面会有一个为空的文件,文件名是对的,但没有数据,而在回调函数onActivityResult中的data不为空,会为你传入的路径名.所以在使用Intent调用相机拍照或摄像时最好不要传入存储路径,否则在不同的机子上会出现不同的问题,按照默认的给定路径寻找文件即可. (二)如下:拍照 Int

iOS 调用系统相机拍照相册功能

写一个按钮直接复制下面代码 视图必须继承 <UIImagePickerControllerDelegate,UIPopoverControllerDelegate,UIActionSheetDelegate>代理 //取拍照片 - (void)showActionSheet { UIActionSheet *sheet; if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCame