2016-01-13 66 views
2

我一直在使用Camera Intent捕获图像。它第一次完美地工作,我能够捕捉图像并在ImageView中显示。但是当我第二次尝试拍摄不同的图像时,它仍然显示相同的旧图像。从相机第二次拍摄时无法加载图像

这里是我的相机意图和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(); 
      } 
     }); 

活动A

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); 
      } 
     }); 

编辑(加时间戳)

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(imageUri);致电。或者,您可以每次保存到不同的文件;例如,通过向文件名添加时间戳。

+0

迈克先生的工作..谢谢 –

0

问题可能码是的ImageView不会刷新内容。 您应该在更改内容后尝试调用invalidate方法。

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

它仍然是相同的兄弟 –

相关问题