3

Когда пользователь нажимает крестик, чтобы не принимать фотографию, она заканчивает намерение так же, как и при принятии фотографии, которую они взяли. Он сохраняет файл в галерее устройств. Но это пусто. Не следует нажимать на крестик, что 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 после удаления, чтобы она отображалась, поскольку она, кажется, работает сейчас.

ответ

2

Вы не создаете файл с createImageFile()? Вы можете сохранить фотоФиль и результат! = RESULT_OK удалить его

Кстати, приложения для камеры (даже по умолчанию) могут возвращать неправильный результат. Проверьте это в журналах. Если это так, просто не полагайтесь на результат & проверьте размер создаваемого файла. If == 0 - удалить его

+0

Спасибо, звучит хорошо. Завтра выйдет. Это или только сохранение onActivityResult, которое может быть меньше для приложения, хотя я сомневаюсь, что это повлияет на производительность. – user3164083

+0

Я попытался это сделать, и пустое изображение все еще находится в галерее. Я поставил свою задачу на дно моего вопроса. Приветствия. Обратите внимание, что mCurrentPhotoPath установлен в файл.getAbsolutePath в 'createImageFile()' – user3164083

+0

Теперь он работает. Возможно, просто добавьте в ответ, чтобы не забыть отсканировать соответствующую область SD-карты с помощью MediaScannerIntent после удаления, иначе она пока не покажет удаление, что сбивает с толку. Благодаря! – user3164083

Смежные вопросы