마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

url 끌어와서 이미지뷰에 이미지 보여주기

0 추천

 

요약드리자면 
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();
       }

 

 
를 추가해주어서 임시파일을 삭제 하게 하였습니다. 그런데 실행을 하니 이미지가 안뜹니다.
 
브루스웨인 (8,580 포인트) 님이 2013년 6월 12일 질문

1개의 답변

0 추천
 
채택된 답변
a랑 b 액티비티의 임시파일 파일명이 달라서 그래요 b액티비티에서 확인하시면 없는 파일이라는거 아실거에요
ignitepaper (1,720 포인트) 님이 2013년 6월 13일 답변
브루스웨인님이 2013년 6월 18일 채택됨
아 그럼 제가 /sdcard/temp 이런식으로 지정해줘서 맞추면되나요?

또는 A에서 임시파일경로 인텐트로 넘겨서 B에서 받으면 되나요
파일명을 시스템시간으로 생성하고 계셔서 저 함수불릴때마다 파일명이.달라져요
둘다됩니다 경로는 파일명까지 써주세요
File    file    =   new File("/sdcard/temp.jpg");
이렇게 바꿔줬는데 안되는데 뭐가 문제죠?
/sdcard <- 단말에 따라서 sdcard 경로 폴더명이 다를 수 있습니다.
/sdcard 대신 envirmoent쓰세요. 그리고 sdcard read,write권한 주고요
...