摄像头拍照时,不要解析返回的data

原创 2018年04月16日 19:30:16

看到《第一行代码》中调用摄像头拍照代码的如下:

@Override
public void onClick(View view) {
    if (btn_take_photo == view){
        File imgFile = new File(getExternalCacheDir(), "abc.png");
        //imgFile = "/storage/emulated/0/Android/data/com.lyl.avatar/cache/abc.png"
        if (imgFile.exists()){
            imgFile.delete();
        }
        try {
            imgFile.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        //File对象 -->  Uri对象
     if (Build.VERSION.SDK_INT >= 24){
            /*
                Android7.0以后不再使用真实路径的Uri,FileProvider是特殊的内容提供者,可以选择性的将封装过的Uri共享给外部
                FileProviderContentProvider的子类,清单文件中要添加provider
                imgUri的值打印出来为:"content://com.lyl.avatar.takephoto/my_imgs/Android/data/com.lyl.avatar/cache/abc.png"
            */
            imgUri = FileProvider.getUriForFile(MainActivity.this, "com.lyl.avatar.takephoto", imgFile);
        } else {
            //  imgUri的值打印出来为:"file:///storage/emulated/0/Android/data/com.lyl.avatar/cache/abc.png"
            imgUri = Uri.fromFile(imgFile);
        }

        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
        startActivityForResult(intent, TAKE_PHOTO_REQ);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if ((TAKE_PHOTO_REQ == requestCode) && (RESULT_OK == resultCode)){
        setImg(imgUri);
    } 
}
public void setImg(Uri imgUri){
    //getContentResolver,内容解析器,和getContentResolver对应
   InputStream inputStream = null;
    try {
        inputStream = getContentResolver().openInputStream(imgUri);
        //BitmapFactory --> Bitmap
        Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//bitmap  : 位图对象
        iv_photo.setImageBitmap(bitmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}
发现可以用getExternal的方式来获取uri,经尝试发现会报错,就搜索了下相关问题。
1).当指定uri时,mSaveUri不为null,系统在保存完图片,直接setResult(RESULT_OK)了,并没有创建intent返回,故在onActivityResult中的data为null;

2).若不指定uri,mSaveUri为null会把图片转换为bitmap,创建Intent,把bitmap存放在data中,即在onActivityResult中通过 data.getExtras().get("data");就能拿到图片的Bitmap。但data返回的是缩略图,没有原始图片清晰。



故,在保存自己图片的uri时,不要使用解析返回的data的方法。

参考链接:
https://blog.csdn.net/u010298576/article/details/50537983
https://blog.csdn.net/wenqiaoqqq/article/details/51516639

iOS-多媒体-音视频播放、录制 | 拍照 录像

本课程由扣丁学堂教学总监郭宏志讲授,主要讲解多媒体这一专题课程,内容包括:播放音乐、处理播放中断和续播、实现录音、播放视频、捕获视频缩略图、选择系统音乐、拍照和录像等知识。
  • 2015年11月26日 14:40

Android调用系统相机onActivityResult返回参数data为null

一般调用系统相机的代码: filePath = ImageUtil.getCacheFilePath(this, StaticValue.PHOTO_PROTOCOL_ENTRUST); File ...
  • b7223058
  • b7223058
  • 2017-09-07 11:03:22
  • 309

android 调用摄像头返回拍摄图片

1. onclick 调用拍摄页面, private void intciew() { reclerview= (RecyclerView) findViewById(R.id.recler...
  • lishangnan
  • lishangnan
  • 2017-05-26 10:56:51
  • 514

解决android调用系统相机拍照保存时onActivityResult中data为null的问题

调用系统相机照相的代码: boolean isNull=false;//判断照相机返回数据是否为空 Intent getImageByCamera = new Intent("android...
  • An_Illusion
  • An_Illusion
  • 2016-05-08 20:45:49
  • 1315

Android_照相机Camera_调用系统照相机返回data为空

于是我查看了Android系统框架Camera应用程序,找到了关于系统照相机如何处理返回值data问题! 默认情况下,即不需要指定intent.putExtra(MediaStore.EXTRA_OU...
  • strawberry2013
  • strawberry2013
  • 2013-11-24 09:29:56
  • 35311

Android 调用系统相机返回data为null

现在市场上很多app都有拍照功能,一般简单的拍照使用系统的拍照功能就足够了,复杂一些的需要自定义camera去实现。 使用系统的拍照功能一般代码实现如下: /** * 调用系统拍照功能 */ @Ov...
  • wenqiaoqqq
  • wenqiaoqqq
  • 2016-05-27 14:47:12
  • 4805

android 调用系统相机拍照,返回的data为null

最近做项目,需要拍照功能,于是就想简单的调用系统相机来完成这一需求(当然,如果想要个性化一点的,也可以自定义camera去实现,这里暂时不做)。if(Environment.getExternalSt...
  • u014038534
  • u014038534
  • 2016-10-22 23:32:29
  • 3572

Android使用摄像头,分别获取照片的缩略图与原图

本文主要有以下两个功能: 1、打开摄像头拍照,将一张缩略图显示在imageView中 2、将照片的原图显示在imageView中...
  • An5Fier185
  • An5Fier185
  • 2016-07-01 16:47:45
  • 420

android 调用摄像头进行拍照,并对照片进行裁剪,然后显示。

在xml中布入2个控件,一个Button,一个ImageView,就不在此赘述了。 在MainActivity中: onCreate(){ takephoto=(Button)findVi...
  • a549742320
  • a549742320
  • 2016-08-01 17:07:37
  • 234

android 手机拍照后获取图片导致OOM问题

1.拍摄图片后获取的图片大小为 11M  通过一下方法获取到图片Uri takePhotoUri = Uri.parse(android.provider.MediaStore.Images.Medi...
  • houhualiang
  • houhualiang
  • 2015-10-08 18:40:08
  • 986
收藏助手
不良信息举报
您举报文章:摄像头拍照时,不要解析返回的data
举报原因:
原因补充:

(最多只允许输入30个字)