TODAY : / TOTAL :

[ Android ] 디바이스 및 킷캣(Kitkat) 업데이트에 따른 갤러리 경로 호출 문제

  • Share this:
반응형
이번에 대만 런칭 준비를 하며 디바이스 테스트를 해보던 중에 사진이 업로드 되지 않는 버그를 발견했다.

갤러리 호출 파트에서 디버깅을 해보니, Path 값이 들어오지 않아서 체크해보니 다음과 같이 나타남.


* 테스트 기종은 아래와 같으며, 두 디바이스 모두 Android Version - KitKat 으로 설치되어 있음.
*  HTC Zara :
content://com.android.providers.media.documents/document/image:1152

*  Samsung Galaxy S4 :
content://media/external/images/media/1152 

Google Drive에서 사진 가져올 시 :
content://com.google.android.apps.photos.content/3/https://lh5.googleusercontent.com/ABCD-EFGH=KJ flg=0x1
 

* 추가
겔럭시 시리즈에서 사진을 Picasa에 자동업로드 해주는 기능을 지원합니다.
해당 사진들을 읽어오면 Uri Path가 다음과 같은 형식으로 잡힙니다.
content://com.sec.android.gallery3d.provider ...........




킷캣으로 업데이트 되면서 외부저장소 호출이 가능한 함수가 새로 생겨났다.
( * 킷캣 업데이트 내용은 여기에서 확인할 수 있음 )

그러면서 호출 경로 부분에서도 약간의 변화가 생겼다. 기본적으로 사용하던 갤러리의 경로 ( content://media/external/images/media/ ) 가 좀 더 세분화되었다. 
그 덕분에(?) uri에 셋팅된 경로가 바뀌면서 Segement 값을 잘못 읽어들이거나, 읽어들일수 없게 되어, 오류가 발생하게 된다.

경로를 받아와서 사진 데이터를 읽어들이는 방식에 대한 예외처리 작업이 조금 필요하다.

다음 코드는 Intent 를 받아와 getData를 통해 전달받은 Uri값으로 경로를 받아오는 부분이다.


( * DocumentManager 는  API 19 SDK의 DocumentContract 와 동일합니다. 또는 여기 참고.)

 


 * HTC Zara :
content://com.android.providers.media.documents/document/image:1152
* Samsung Galaxy S4 :
content://media/external/images/media/1152
From Google Drive :
content://com.google.android.apps.photos.content/3/https://lh5.googleusercontent.com/ABCD-EFGH=KJ flg=0x1
 
결론은  uri.getAuthority() 와  uri.getLastPathSegement() 값을 분류해주는 작업만 잘 해주면 됨...
나머지 불러오는 방식은 일반 갤러리 호출 방식과 같음. 



:: 참고 사이트 ::
- 갤러리 또는 SD카드에서 이미지를 선택했을 때 절대경로 받아오는 방법
- URI로 실제 경로 받아오기
- 안드로이드 킷캣(Kitkat - API 19 ) 정보
반응형

SEARCH

태그로 찾아보기