#java #android #android-studio #android-camera #save-image
Вопрос:
Я пытаюсь создать приложение, которое захватывает изображение и сохраняет его в моем внутреннем хранилище. Когда я изменяю свой код из файла storageDir = getExternalFilesDir(Среда.DIRECTORY_PICTURES); в файл storageDir = Environment.getExternalStoragePublicDirectory(Среда.DIRECTORY_DCIM); (из-за отсутствия SD-карты на моем телефоне) камера не открывается, и файл хранится в моей папке DCIM. В сохраненном файле будет ошибка «Формат файла не поддерживается или файлы повреждены». Если я использую Окружающую среду.DIRECTORY_PICTURES вместо этого показывает предварительный просмотр камеры и просмотр изображений, но файлы не будут сохранены.
Я новичок, и я очень признателен за любую помощь. Заранее спасибо.
Мой код выглядит так, как показано ниже
public static final int REQUEST_IMAGE_CAPTURE =1;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
File imgFile = new File(mCurrentPhotoPath);
if (imgFile.exists()) {
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
ImageView myImage = (ImageView) findViewById(R.id.imageViewID);
myImage.setImageBitmap(myBitmap);
}
}
}
String mCurrentPhotoPath;
private File createImageFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" timeStamp "_";
//File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
static final int REQUEST_TAKE_PHOTO = 1;
void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// Ensure that there's a camera activity to handle the intent
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
File photoFile = null;
try {
photoFile = createImageFile();
} catch (IOException ex) {
// Error occurred while creating the File
}
// Continue only if the File was successfully created
if (photoFile != null) {
Uri photoURI = FileProvider.getUriForFile(this,
"com.example.android.fileprovider",
photoFile);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
}
Комментарии:
1. извините, я не понимаю, что вы имеете в виду. когда я использую файловое хранилище = getExternalFilesDir(Среда. DIRECTORY_PICTURES);, Я могу открыть камеру с намерением. но когда я изменяю его на файл storageDir = Environment.getExternalStoragePublicDirectory(Среда. DIRECTORY_DCIM);, Я не могу просматривать камеру. Я не понимаю, почему это происходит
2.
it does not open the camera and a file is stored in my DCIM folder.
Я понятия не имею, почему приложение камеры не запускается. Но, кроме того, вы сами создаете этот файл. Не делай этого. Вам нужен только экземпляр файла.3. спасибо вам за ваш ответ. не могли бы вы привести мне пример предоставления только экземпляра файла? и вы знаете, почему файл, сохраненный в моей папке DCIM, выдает ошибку «Формат файла не поддерживается или файлы повреждены»? я забыл упомянуть об этом в своем первоначальном посте и отредактировал его.
4. Файл файл = новый файл(Среда.getExternalStoragePublicDirectory(Среда. DIRECTORY_DCIM), «picture.jpg»); И ваш файл имеет длину файла 0 байт. По-видимому, это считается испорченным; -).
5. Отмеченный. как добавить длину файла в байтах? Извините, я действительно новичок в этом и совершенно ничего не понимаю