网上大部分的解决方案,都是如下方式:
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent,REQUEST_CODE_CAPTURE_CAMEIA);
拍照完成之后,回调:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) { //此处的 RESULT_OK 是系统自定义得一个常量
return;
}
if (data!=null) {
if (requestCode == REQUEST_CODE_CAPTURE_CAMEIA) {
Uri uri = data.getData();
if (uri == null) {
//use bundle to get data
Bundle dataBundle = data.getExtras();
if (dataBundle != null) {
Bitmap photo = (Bitmap) dataBundle.get("data");
if (photo!=null) {
//在一些手机上获取到的照片,发现尺寸很小
}
}
} else {
//通过uri来显示图片
imageView.setImage(uri);
}
}
}
}
通过实验之后发现,在一些手机上是通过uri来获取到图片的,都是可以获取到实际拍摄大小的照片。
还有一些手机是通过data.getExtras().get("data")来获取拍摄的照片,但是发现实际得到的照片尺寸却很小。
通过研究找到了解决的方案如下:
改写调用方法:
String filename = Tools.getCurDateStr()+".jpg";
cameraFile = new File(Environment.getExternalStorageDirectory()+"/"+Const.FOLDER_VOC_TEMP+"/"+filename);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile));
startActivityForResult(intent, REQUEST_CODE_CAPTURE_CAMEIA);
回调的时候:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (cameraFile.exists()) {
Bitmap bitmap = null;
try {
FileInputStream fis = new FileInputStream(cameraFile);
bitmap = BitmapFactory.decodeStream(fis);
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
if (bitmap!=null) {
Log.e(getClass().getName(), (bitmap.getWidth()+","+bitmap.getHeight()));
}
}
}
这样就解决了此问题。