Когда пользователь нажимает крестик, чтобы не принимать фотографию, она заканчивает намерение так же, как и при принятии фотографии, которую они взяли. Он сохраняет файл в галерее устройств. Но это пусто. Не следует нажимать на крестик, что resultCode! = RESULT_OK? Есть ли еще одна проверка, которую я пропускаю? Благодарю. Вот код. Подождите, я сохраняю изображение до результата операции ... это некорректная система, но она была на официальном сайте разработчиков Android. Если кто-то может предложить исправить, я был бы очень благодарен, потому что я использовал для сохранения изображения в onActivtyResult, и он не работал на некоторых телефонах, вызывая исключение, поэтому я изменил это.Цель камеры onActivityResult-код сохраняет (пустую) картинку, даже если фотография не была принята пользователем
Для начала намерения:
private 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) {
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO);
}
}
}
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 = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(
imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
// Save a file: path for use with ACTION_VIEW intents
mCurrentPhotoPath = image.getAbsolutePath();
ih.galleryAddPic(mCurrentPhotoPath, this.getApplicationContext());
return image;
}
Камера Намерение случай в onActivityResult:
else if ((requestCode == REQUEST_TAKE_PHOTO) && (resultcode == RESULT_OK)){
mProfilePicPath = mCurrentPhotoPath;
mPortraitPhoto = ih.decodeSampledBitmapFromImagePath(mCurrentPhotoPath,
GlobalConstants.PROFILE_PICTURE_RESOLUTION,
GlobalConstants.PROFILE_PICTURE_RESOLUTION);
TextView tv = (TextView) findViewById(id.ProfilePicText);
tv.setText(mProfilePicPath);
}
}catch(Exception ex){
Log.d("shkdghrfb", ex.toString());
}
}
EDIT: Я изменил onActivityResult к этому, но безрезультатно (пустое изображение еще в моей галерее впоследствии, и значение удалено верно):
else if (requestCode == REQUEST_TAKE_PHOTO){
if(resultcode == RESULT_OK){
File f = new File(mCurrentPhotoPath);
mProfilePicPath = null;
if (f.exists()) {
if (f.length() != 0){
mProfilePicPath = mCurrentPhotoPath;
mPortraitPhoto = ih.decodeSampledBitmapFromImagePath(mCurrentPhotoPath,
GlobalConstants.PROFILE_PICTURE_RESOLUTION,
GlobalConstants.PROFILE_PICTURE_RESOLUTION);
TextView tv = (TextView) findViewById(id.ProfilePicText);
tv.setText(mProfilePicPath);
}
else {
boolean deleted = f.delete();
if (deleted == true){
Log.d("camera0", "deleted");
}
else{
Log.d("camera0", "not deleted");
}
}
}
}
else{
File f = new File(mCurrentPhotoPath);
boolean deleted = f.delete();
if (deleted == true){
Log.d("camera", "deleted");
}
else{
Log.d("camera", "not deleted");
}
}
}
}catch(Exception ex){
Log.d("shkdghrfb", ex.toString());
}
}catch(Exception ex){
Log.d("shkdghrfb", ex.toString());
}
Редактировать Хорошо, мне кажется, мне нужно было отсканировать соответствующую область SD-карты с помощью MediaScannerIntent после удаления, чтобы она отображалась, поскольку она, кажется, работает сейчас.
Спасибо, звучит хорошо. Завтра выйдет. Это или только сохранение onActivityResult, которое может быть меньше для приложения, хотя я сомневаюсь, что это повлияет на производительность. – user3164083
Я попытался это сделать, и пустое изображение все еще находится в галерее. Я поставил свою задачу на дно моего вопроса. Приветствия. Обратите внимание, что mCurrentPhotoPath установлен в файл.getAbsolutePath в 'createImageFile()' – user3164083
Теперь он работает. Возможно, просто добавьте в ответ, чтобы не забыть отсканировать соответствующую область SD-карты с помощью MediaScannerIntent после удаления, иначе она пока не покажет удаление, что сбивает с толку. Благодаря! – user3164083