2016-06-16 2 views
0
if(intent.getType().startsWith("image/")){ 
    Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); 
    imageView.setImageUri(imageUri); 
} 

내 응용 프로그램 데이터 디렉토리에이 이미지를 저장해야합니다. 내용 분석기를 쿼리하면 이미 장치에 저장된 이미지 파일 만 경로가 반환됩니다. 같은다른 응용 프로그램에서 공유 한 이미지를 수신하고 저장하는 방법

private String getPathFromURI(Uri contentURI) { 
     String result = null; 
     Cursor cursor = null; 
     try { 
      cursor = getContentResolver().query(contentURI, null, null, null, null); 
      cursor.moveToFirst(); 
      int idx = cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA); 
      result = cursor.getString(idx); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
     return result; 
    } 

는하지만이되지 않은 이미지 파일 중 일부는 응용 프로그램의 개인 디렉토리에 있기 때문에 모든 시간을 작동 않습니다. 공유 파일의 복사본을 내 응용 프로그램에 쓰거나 저장할 수 있도록 이러한 파일에 대한 읽기 권한을 얻으려면 어떻게해야합니까? 뭔가 잘못 되었나요? 다른 방법으로해야합니까? 친절하게 도와주세요, 고마워요.

+0

하, 그냥 오타 주석 : 쿼리 및 큐 레이 잉은 매우 다른 두 가지입니다. 당신이 무언가를 질문하고 싶을 때, 당신은 그것을 "질의"합니다. "퀴어 (Queer)"는 현대 영어에서 이상하거나 이상한 것을 의미하며 다른 의미있는 공격을 의미합니다. 죄송합니다 귀하의 실제 문제에 대한 도움을 제공 할 수 없습니다 : ( –

+0

: D 문제 없으며, 나를 고쳐 주셔서 감사합니다 :) –

답변

0

콘텐츠 해결에 Queering 이미 장치

그것보다 훨씬 더 나쁘다에 저장됩니다 만 이미지 파일의 경로를 반환합니다. 이는 MediaStore에서 Uri에 대해서만 작동하며 경우에 따라서도 가능합니다.

이러한 파일에 대한 읽기 권한을 얻으려면 어떻게해야합니까? 내 응용 프로그램에 대한 사본을 쓸 수 있도록하려면 어떻게해야합니까?

단계 # 1 : getContentResolver().openInputStream()Uri

단계 # 2로 표시 내용 상에 InputStream를 얻을 수 : 생성하여 원하는 복사

3 단계에 대한 FileOutputStream :로부터 바이트를 복사 InputStream에서 FileOutputStream으로 표준 Java 파일 I/O를 사용합니다.

IOW, 이는 URL에서 파일을 다운로드 할 때 HttpURLConnection을 사용하는 것과 큰 차이가 없습니다.

+0

좋아요, 입력 스트림이 항상 열립니다? 또는 내가 처리해야하는 몇 가지 예외적 인 경우가있을 것인가? –

+0

@AmanSharma : 항상 버그가있는 클라이언트가 있으므로 항상 사용할 수없는 'Uri'를 얻을 수 있습니다. 그리고 잠시 동안 (프로세스가 실행되는 동안에 만) 컨텐츠에 액세스 할 수 있으므로이 데이터를 즉시 복사하고 싶을 것입니다. 그렇지 않으면 상당히 견고해야합니다. – CommonsWare

+0

나는 uri에서 직접 inputStream을 얻을 수 있다는 것을 깨닫기 전에 uri에서 파일의 절대 경로를 가져 오려고 시도하고 FileOutputStream을 사용하여 해당 파일을 writting하려고했습니다. 이제 괜찮습니다. 고맙습니다. –