我看到了关于这个问题的其他问题和答案,但是它们都不适合我。
我正在尝试从相机拍摄照片并将其显示在imageview中。我也使用一个Helper类有一个更干净的代码。
下面是Helper类中的代码:
采取图片:
public static void getphoto(final Activity act, final int int, final Uri uri){
Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
act.startActivityForResult(cameraIntent, int);
}
得到filpath:
public static String pathgal(Activity act, Uri uri){
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = act.getContentResolver().query(uri, filePathColumn, null, null, null);
if (cursor != null) {
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
return filePath;
}
return null;
}
得到结果:
if (requestCode == CAMERA_REQUEST) {
if (resultCode == RESULT_OK) {
String capturedImageFilePath = Helper.pathgal(act, mCapturedImageURI);
bmp = Helper.decodeFile(capturedImageFilePath);
Log.d("******CAMERAAAAAAA*******", "Camera fine 10");
if(data != null)
{
Log.d("******CAMERAAAAAAA*******", "Camera fine 11");
Helper.showpic(act, id1, bmp);
Log.d("******CAMERAAAAAAA*******", "Camera fine 12");
} else if (data == null) {
Log.d("******CAMERAAAAAAA*******", "Camera fine 13");
Toast.makeText(act.getApplicationContext(), "Data is Null",
Toast.LENGTH_SHORT).show();
}
}
}
现在,如果我在低级别手机(如HTC wildfire s)上测试这个,一切都工作得很好,我得到了"相机良好11和12"的日志。但如果我在高端手机(比如Galaxy s4)上测试它,它会给我"数据为空"one_answers"摄像头良好13"。
那么我应该如何防止在这种设备中得到null呢?
当您传递额外的参数MediaStore时。EXTRA_OUTPUT with uri在camera intent中,你告诉camera activity将捕获的图像写入该路径,并且它不会在onActivityResult方法中返回位图。所以你在onActivityResult上得到null。
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri); //this line
你不妨试试这个
String capturedImageFilePath = Helper.pathgal(act, mCapturedImageURI);
bmp = Helper.decodeFile(capturedImageFilePath);
if(bmp != null)
{
Helper.showpic(act, id1, bmp);
} else{
Toast.makeText(act.getApplicationContext(), "bmp is Null",Toast.LENGTH_SHORT).show();
}