Java Android摄像头:拍照后获取照片Uri
我需要在用户使用Android中的SurfaceView拍照后获取图像的文件路径Uri。我需要这个,这样我可以在另一个视图中显示图像 以下是我当前的代码:Java Android摄像头:拍照后获取照片Uri,java,android,android-layout,android-camera,Java,Android,Android Layout,Android Camera,我需要在用户使用Android中的SurfaceView拍照后获取图像的文件路径Uri。我需要这个,这样我可以在另一个视图中显示图像 以下是我当前的代码: captureImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mCamera.takePicture(null, null, jpegCal
captureImage.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mCamera.takePicture(null, null, jpegCallback);
}
});
mSurfaceView.getHolder().addCallback(this);
mSurfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mCamera = Camera.open();
jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try {
Intent i = new Intent(CameraActivity.this, ImageEditor.class);
//i.putExtra("image", I_need_to_send_the_Uri);
startActivityForResult(i, 0);
} catch (Exception e) {
e.printStackTrace();
}
}
};
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(mSurfaceView.getHolder());
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Camera.Parameters params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPreviewSizes();
Camera.Size selected = sizes.get(0);
params.setPreviewSize(selected.width, selected.height);
mCamera.setParameters(params);
mCamera.setDisplayOrientation(90);
mCamera.startPreview();
}
如何从中获取图像Uri?或者,您建议用其他方法在另一个视图中打开图像?我尝试发送byte[]数组和位图,但它太重,无法在视图之间传输,这是一种糟糕的做法。如果可以,请提供帮助:首先,您需要将数据保存到文件中,并将其存储到设备存储器中
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
return mediaFile;
}
通过此代码从文件中获取Uri
Uri.fromFile(Filename);
首先,您需要将数据保存到文件中,并将其存储到设备存储器中
PictureCallback mPicture = new PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
File pictureFile = getOutputMediaFile();
if (pictureFile == null) {
return;
}
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
fos.write(data);
fos.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
};
private static File getOutputMediaFile() {
File mediaStorageDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
"MyCameraApp");
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.d("MyCameraApp", "failed to create directory");
return null;
}
}
// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
.format(new Date());
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ "IMG_" + timeStamp + ".jpg");
return mediaFile;
}
通过此代码从文件中获取Uri
Uri.fromFile(Filename);
你知道如何将这个Uri对象传递给另一个活动吗?我知道它不起作用,然后试试这些答案。将Uri添加到intent see answerMate中的extras中,当我尝试将Uri设置为imageview时,什么都没有发生。当我记录路径时,路径被正确打印,但是我似乎无法将其设置为图像视图。我也试着把它转换成位图。你能帮忙吗?漂亮的答案!你知道如何将这个Uri对象传递给另一个活动吗?我知道它不起作用,然后试试这些答案。将Uri添加到intent see answerMate中的extras中,当我尝试将Uri设置为imageview时,什么都没有发生。当我记录路径时,路径被正确打印,但是我似乎无法将其设置为图像视图。我也试着把它转换成位图。你能帮忙吗?漂亮的答案!