java - 安卓相机 : Get Picture Uri after the photo is taken

标签 java android android-layout android-camera

我需要在用户使用 Android 中的 SurfaceView 拍照后获取图像的文件路径 Uri。我需要这个以便我可以在另一个 View 中显示图像。

这是我当前的代码:

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?或者你建议用什么其他方法在另一个 View 中打开图像?我尝试发送 byte[] 数组和位图,但它太重而无法在 View 之间传输,这是不好的做法。如果可以,请帮忙:)

最佳答案

首先您需要将数据保存到文件中并将其存储到设备存储器中。

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);

关于java - 安卓相机 : Get Picture Uri after the photo is taken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32344424/

相关文章:

android - 即使应用程序未运行也能保持 FirebaseMessagingService 的服务并显示带有数据负载的通知

java - getformat 用于显示周

java - Mule ESB - 在同一流程中配置多个组件

java - String.contains 找到一个子字符串但没有找到 Pattern.matches?

java - 在 Android 中通过 PHOTO_FILE_ID 将联系人的图像更改为大照片

android - 如何使用 google place api 根据附近的偏好获取 "colleges"的列表?

android - RelativeLayout - CenterInParent 和 marginTop

android - 在抽屉导航底部添加图像

java - Retrofit 2 RequestBody writeTo() 方法调用了两次

android - android :orientation ="vertical" vs android:orientation ="horizontal"之间的区别