Android: Получение имени файла с камеры?
Вопрос
У меня возникла проблема с чем-то, что я, вероятно, просто пропускаю.
Я хочу сделать снимок с предпросмотра поверхности камеры и сохранить его в 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;
}
});
Он не будет использовать имя файла (то есть время / дату, на которое я его прошу).
Решение
Это было решено путем реализации PictureCallback через класс ImageCaptureCallback и переопределения onPictureTaken, где файл записывался через поток вывода файла. Все, что вам нужно было сделать, это изменить поток вывода файла на желаемое имя файла.
Другие советы
это не сохраняет изображение? в моем приложении этот код сохраняет изображение, возможно, вы используете переменную " filaname " получить изображение с SDCard? использовать изображение из SDCard лучше сохранить в переменной, например, " fileUri " значение uri.toString, end get из файла sdcard с помощью uri Uri.parse (fileUri) ..
Надеюсь, это поможет / Вероятно, не лучший способ сделать это, но это сработало.
Вот, пожалуйста:
Это обратный вызов для захвата изображения камерой .
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();
}
}
}