admin管理员组文章数量:1573690
现在市场上很多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;
}
}
/**
* 获取拍照得到的图片
*/
@Override
protected 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依然没有数据。
原来如此,看来最稳妥的方式就是通过保存的图片地址获取了,修改如下:
/**
* 获取拍照得到的图片
*/
@Override
protected 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/zimo2013/article/details/16916279
版权声明:本文标题:Android 调用系统相机返回data为null 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727747637a1127998.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论