Android:从相机获取文件名?

时间:2009-01-18 20:30:58

标签: android file camera

我遇到了一个我可能只是忽略的问题。

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

这就是我一直在努力做的事情:

    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 个答案:

答案 0 :(得分:6)

通过ImageCaptureCallback类实现PictureCallback,并覆盖通过文件输出流写入文件的onPictureTaken,解决了这个问题。您所要做的就是将fileoutput流更改为您想要的文件名。

答案 1 :(得分:0)

它不保存图像?在我的应用程序中,此代码保存图像,也许您使用变量“filaname”从SD卡获取图像?使用sdcard中的图像最好保存在变量中,例如,uri.toString的“fileUri”值,最后用uri Uri.parse(fileUri)从sdcard文件中获取..

答案 2 :(得分:0)

你走了:希望这会有所帮助/可能不是最好的方法,但它有效。

这是摄像头捕获图像回调

import java.io.FileOutputStream;
import java.io.OutputStream;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.util.Log;
import android.widget.Toast;

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

}