Android(安卓)调用系统相机返回data为null
16lz
2021-01-26
现在市场上很多app都有拍照功能,一般简单的拍照使用系统的拍照功能就足够了,复杂一些的需要自定义camera去实现。
使用系统的拍照功能一般代码实现如下:
/** * 调用系统拍照功能 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.bt_take_photo: if( Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) ){ Intent intent = new Intent(); try { fileName = getPhotoFileName(); mPhotoPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/" + fileName; mPhotoFile = new File(mPhotoPath); if( !mPhotoFile.exists() ){ mPhotoFile.createNewFile(); } } catch (Exception e) { e.printStackTrace(); } intent.setAction("android.media.action.IMAGE_CAPTURE"); intent.addCategory("android.intent.category.DEFAULT"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mPhotoFile));//将拍照后图片保存到指定目录 startActivityForResult(intent, TAKE_PICTURE); }else { ToastUtil.showShortToast(context, "请确认插入SD卡"); } break; default: break; } }
/*** 获取拍照得到的图片*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if( requestCode == TAKE_PICTURE && resultCode == RESULT_OK ){if( data != null ){Bundle bundle = data.getExtras();bitmap = (Bitmap) bundle.get("data");}bt_take_photo.setVisibility(View.GONE);//压缩处理图片HandlerPhoto();}}
结果运行在手机上直接报错:java.lang.NullPointerException,分析日志后log发现bitmap这个变量为null,怎么会为空?!! 百思不得其解,图片明明已经保存在sd卡上,最后看了一位大神的博客,发现Android相机有这样的机制:照相机有自己默认的存储路径,拍摄的照片将返回一个缩略图,即data里面保存的数据。但是如果自己代码指定了保存图片的uri,data里面就不会保存数据。也就是说,调用相机时指定了uri,data就没有数据,没有指定uri,data就有数据。但是这个规律也不是适用于所有的安卓手机,红米和三星部分型号在没有指定uri时,data依然没有数据。
原来如此,看来最稳妥的方式就是通过保存的图片地址获取了,修改如下:
/*** 获取拍照得到的图片*/@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if( requestCode == TAKE_PICTURE && resultCode == RESULT_OK ){bitmap = BitmapFactory.decodeFile(mPhotoPath);//if( data != null ){//Bundle bundle = data.getExtras();//bitmap = (Bitmap) bundle.get("data");//}bt_take_photo.setVisibility(View.GONE);//压缩处理图片HandlerPhoto();}}
这下就没问题了。
参考资料:
http://blog.csdn.net/zimo2013/article/details/16916279
更多相关文章
- Android(安卓)下载图片并显示在ImageView中
- Android使用开源框架加载图片
- Android(安卓)设置圆角图片
- Android(安卓)Camera2.0 结合ImageReader拍照并解决图片偏转问题
- Android—实现自定义相机倒计时拍照
- drawable—hdpi、drawable—mdpi、drawable—ldpi详解
- android:configChanges 属性注意事项 翻转不起作用的问题
- android Listview 软引用SoftReference异步加载图片
- Android-Opengl 实现图片滤镜功能