요약드리자면
A액티비티에서 크롭된이미지를 A xml 에 이미지뷰에 나타냅니다. 그런데 이 이미지를 B xml에서도 보여주고 싶어서
A액티비티에서 이미지를 보여준 후 임시파일을 삭제하는 구문이 있는데 이를 제거해서 삭제하지 못하게 합니다.
그렇다면 임시파일경로로 그 이미지가 그대로 있을 테고 그 임시파일경로를 B액티비티에서 끌어다 쓸겁니다.
그래서 B액티비티에서 임시파일경로를 가져와 이미지뷰에 보여주는 doTakePhotoAction()메소드를 만들었습니다..
(A액티비티에서 지정했던 임시경로를 그대로 끌어다 씁니다.)
그런다음
protected void onCreate(Bundle savedInstanceState){
doTakePhotoAction(); //메소드 추가
}
이렇게 추가 해주어서 이미지를 표시하게 해주고
OnClick메소드에 (화면캡쳐 버튼을 누르면 이제 임시파일 이미지는 필요가 없어집니다.) 버튼을 누르면 화면을 캡쳐 한 후
File f = new File(mImageCaptureUri.getPath());
if(f.exists())
{
f.delete();
}
이걸 추가해주어서 임시파일 이미지를 삭제하게 하려고 했습니다.
이제 설명드립니다.
A 액티비티에서
private void doTakePhotoAction()
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// 임시로 사용할 파일의 경로를 생성
String url = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";
mImageCaptureUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), url));
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
// 특정기기에서 사진을 저장못하는 문제가 있어 다음을 주석처리 합니다.
//intent.putExtra("return-data", true);
startActivityForResult(intent, PICK_FROM_CAMERA);
startActivity(intent);
}
이렇게 임시경로를 사용합니다. 그리고 작없이 끝나면
final Bundle extras = data.getExtras();
if(extras != null)
{
Bitmap photo = extras.getParcelable("data");
mPhotoImageView.setImageBitmap(photo);
}
// 임시 파일 삭제
File f = new File(mImageCaptureUri.getPath());
if(f.exists())
{
f.delete();
}
이렇게 이미지를 보여주고 임시파일을 삭제 합니다.
그런데 저는 B액티비티에 임시파일을 보여주고 싶었습니다. 그래서 저 임시파일 삭제 구문을 제거한다음 B액티비티에서
private void doTakePhotoAction()
{
File file = new File("tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg");
mImageCaptureUri = Uri.parse(file.getAbsolutePath());
mPhotoImageView = (ImageView) findViewById(R.id.profile);
mPhotoImageView.setImageURI(mImageCaptureUri);
}
이렇게 메소드를 만들고
protected void onCreate(Bundle savedInstanceState){
...
doTakePhotoAction(); //메소드 추가
.......
}
이렇게 해놓았습니다.
그런다음 onClick 메소드에
File f = new File(mImageCaptureUri.getPath());
if(f.exists())
{
f.delete();
}
를 추가해주어서 임시파일을 삭제 하게 하였습니다. 그런데 실행을 하니 이미지가 안뜹니다.