zoukankan      html  css  js  c++  java
  • 调用Camera返回为空的分析及处理方法

    前言

    大家可能遇到了这种情况。调用Camera,然后指定自己定义的保存路径,结果返回的Intent为空。我们来分析一下原因。


    分析

    首先看Camera的部分逻辑,在源代码中的Camera.javadoAttach()方法里面。

    // First handle the no crop case -- just return the value.  If the
    // caller specifies a "save uri" then write the data to it's
    // stream. Otherwise, pass back a scaled down version of the bitmap
    // directly in the extras.
    if (mSaveUri != null) {
      OutputStream outputStream = null;
      try {
         outputStream = mContentResolver.openOutputStream(mSaveUri);
         outputStream.write(data);
         outputStream.close();
     
         setResult(RESULT_OK);
         finish();
         } catch (IOException ex) {
             // ignore exception
         } finally {
             Util.closeSilently(outputStream);
         }
    } else {
      Bitmap bitmap = createCaptureBitmap(data);
      setResult(RESULT_OK,
             new Intent("inline-data").putExtra("data", bitmap));
      finish();
    }

    凝视也有明白解释,假如mSaveUri不为空,则直接返回RESULT_OK,不会回传其它不论什么东西。假如为空,则会回传一个bitmap

    再看看我们调用Camera的代码。

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    Date date = new Date();
    String photoDCIM = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM; // 默认相冊的路径
    String path = photoDCIM + File.separator + date.getTime() + ".jpg"; 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(path )));
    startActivityForResult(intent, PICTURE_CAMERA);

    上面带指定的保存路径path 。就是Camera中的mSaveUri

    所以结果就是Camera仅仅会返回RESULT_OK

    结论

    我们调用Camera能够有2种方式获得拍照的图片:


    第1种是指定保存路径。

    如上面的演示样例代码,将path设置为成员变量,在onActivityResult()中,直接读取该值就可以。

    第2种是不指定保存路径。

    调用方法例如以下:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    getActivity().startActivityForResult(intent, PICTURE_CAMERA);

    onActivityResult

    Bitmap bitmap= data.getParcelableExtra("data");  

    这样就能得到拍照的图片了。

    总结

    在日常使用过程中,推荐使用指定保存路径。这样能够方便获得File,然后做其它的操作。

  • 相关阅读:
    关于css兼容性问题及一些常见问题汇总
    CSS3使用transition属性实现过渡效果
    CSS3 画基本图形,圆形、椭圆形、三角形等
    总结30个CSS3选择器
    javascript中call()、apply()的区别
    JavaScript面试技巧之数组的一些不low操作
    详解bootstrap-fileinput文件上传控件的亲身实践
    js控制随机数生成概率代码实例
    jQuery 第十章 工具方法-高级方法 $.ajax() $.Callbacks() .....
    jQuery 第九章 工具方法之插件扩展 $.extend() 和 $.fn.extend()
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7211374.html
Copyright © 2011-2022 走看看