Android:从相机获取文件名?

7

我遇到了一个问题,可能是因为我忽略了某些东西。

我想从相机的预览中拍照,并将其保存到sd_card中。这几乎完美地实现了。我为它分配了一个文件名,但它没有使用filename

这是我一直在尝试做的:

Button imagecapture = (Button) findViewById(R.id.imagecapture);
imagecapture.setOnClickListener(new View.OnClickListener() {
    public void onClick(View view) {
        String filename = null;
        ImageCaptureCallback iccb = null;

        try {
            filename = timeStampFormat.format(new Date());
            ContentValues values = new ContentValues();
            values.put(Media.TITLE, filename);
            values.put(Media.DESCRIPTION, "Image capture by camera");

            Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);
            iccb = new ImageCaptureCallback(getContentResolver().openOutputStream(uri));
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.e(getClass().getSimpleName(), ex.getMessage(), ex);
        }
        camera.takePicture(mShutterCallback, mPictureCallbackRaw, iccb);
        com.froogloid.android.gspot.Park.imageFileName = filename;
    }
});

它不会使用文件名(即我要求的时间/日期戳)。
3个回答

6

通过实现ImageCaptureCallback类中的PictureCallback,并重写onPictureTaken方法,可以解决此问题。在该方法中,文件是通过文件输出流进行写入的。您只需要将文件输出流更改为所需的文件名即可。


0

我的应用程序可以保存图片,你的为什么不行?也许是因为你使用了变量“filaname”来从SD卡获取图像?更好的方法是将图像保存在变量中,例如,“fileUri”,其值为uri.toString,然后使用Uri.parse(fileUri)从SD卡获取文件。


它可以正常保存图像,我尝试了这个: ContentValues values = new ContentValues();
values.put(Media.TITLE, filename); Uri uri = getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values); 但对我来说没有用。我尽力而为。
- Chrispix

0
希望这可以帮到你/也许不是最好的方法,但它起作用了。 在这里:
这是相机捕获图像回调
public class ImageCaptureCallback implements PictureCallback {

    private OutputStream filoutputStream;
    public ImageCaptureCallback(OutputStream filoutputStream) {
        this.filoutputStream = filoutputStream;
    }

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        try {
            Log.v(getClass().getSimpleName(), "onPictureTaken=" + data + " length = " + data.length);
            FileOutputStream buf = new FileOutputStream("/sdcard/dcim/Camera/" + CameraActivity.filename + ".jpg");
            buf.write(data);
            buf.flush();
            buf.close();
            // filoutputStream.write(data);
            filoutputStream.flush();
            filoutputStream.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接