2016-01-13 2 views
2

Я использую Camera Intent для захвата изображений. Впервые он работает отлично, и я могу захватить изображение и показать, что в ImageView. Но когда я пытаюсь повторить второй раз, чтобы записать другое изображение, оно все еще показывает одно и то же старое изображение.Не удалось загрузить изображение при захвате с камеры второй раз

Вот мой код для Intent камеры и onActivityResult()

 Uri selectedImage; 
     private Uri imageUri; 


     private void activeTakePhoto() { 

          Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
          File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
          intent.putExtra(MediaStore.EXTRA_OUTPUT, 
            Uri.fromFile(photo)); 
          imageUri = Uri.fromFile(photo); 
          startActivityForResult(intent,REQUEST_IMAGE_CAPTURE); 
         } 


     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      switch (requestCode) { 
       case RESULT_LOAD_IMAGE: 
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK & null != data) { 
         selectedImage = data.getData(); 
         imageView.setImageURI(selectedImage); 
        } 

        break; 

       case REQUEST_IMAGE_CAPTURE: 
        if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { 
         try { 
          selectedImage = imageUri; 
          getContentResolver().notifyChange(selectedImage, null); 
          imageView.setImageURI(imageUri); 
         } catch (Exception e) { 
          Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) 
            .show(); 
          Log.e("Camera", e.toString()); 
         } 
         Log.e("A", "AAA"); 
        } 
      } 
     } 


    submit.setOnClickListener(new View.OnClickListener() { // back to Activity A listView 
      @Override 
      public void onClick(View v) { 
       Intent returnIntent = new Intent(); 
       amount = Amount.getText().toString(); 
       description = Description.getText().toString(); 
       type = spinnerType.getSelectedItem().toString(); 
       returnIntent.putExtra("type", type); 
       returnIntent.putExtra("description", description); 
       returnIntent.putExtra("amount", amount); 
       if(selectedImage!=null) { 
        returnIntent.putExtra("img_uri", selectedImage.toString()); 
       } 
       setResult(Activity.RESULT_OK, returnIntent); 
       finish(); 
      } 
     }); 

активность

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { // if listView is clicked 
      @Override 
      public void onItemClick(AdapterView<?> a, View v, int position, long id) { // if list is clicked 
       mClickedPosition = position; 
       Object o = listview.getItemAtPosition(position); 
       ImageAndText image = (ImageAndText) o; 
       String type = image.getType(); 
       String amount = image.getAmount(); 
       String description = image.getDescription(); 
       Uri photo = image.getImage(); 
       String[] type1 = type.split(":"); 
       String[] amount1 = amount.split(":"); 
       String[] description1 = description.split(":"); 
       Intent i = new Intent(getApplication(), AddMoreClaims.class); 
       i.putExtra("type", type1[1].toString().trim()); 
       i.putExtra("amount", amount1[1].toString().trim()); 
       i.putExtra("description", description1[1].toString().trim()); 
       i.putExtra("photo", photo); 
       startActivityForResult(i, PROJECT_REQUEST_CODE); 
      } 
     }); 

Edited (добавить TimeStamp)

private void activeTakePhoto() { 
     String filename = "Pic_" + System.currentTimeMillis() + ".jpg"; 
     Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
     File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, 
       Uri.fromFile(photo,filename)); 
     imageUri = Uri.fromFile(photo,filename); 
     startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); 
    } 

ответ

1

Если мы посмотрим на источник ImageView, метод setImageURI() начинается с if проверки аналогично:

public void setImageURI(@Nullable Uri uri) { 
    if (mResource != 0 || 
      (mUri != uri && 
      (uri == null || mUri == null || !uri.equals(mUri)))) { 

     // Drawable resolution and update code 
    } 
} 

Как вы можете видеть из !uri.equals(mUri), то ImageView не будет обновляться сам, если Uri перешел в метод equals(), который уже установлен. Каждый раз ваш код сохраняет один и тот же файл, поэтому Uri s всегда будут одинаковыми.

Просто позвоните imageView.setImageURI(null); перед тем, как позвонить imageView.setImageURI(imageUri);. Кроме того, каждый раз вы можете сохранять в другой файл; например, добавив временную метку к имени файла.

+0

Майк сэр его работа .. спасибо –

0

Эта проблема может быть та t ImageView не обновляет содержимое. После изменения содержимого следует попытаться вызвать метод invalidate.

imageView.setImageURI(imageUri); 
imageView.invalidate(); 
+0

это все тот же брок –

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