Things take time

[Android] 앨범 가져올 때 주의점 및 코드 본문

Android(기능)

[Android] 앨범 가져올 때 주의점 및 코드

겸손할 겸 2018. 6. 28. 14:57

[개요]


앨범을 호출할 때, 인텐트에 넣는 액션은 크게 2가지가 있다.


Intent.ACTION_PICK

Intent.ACTION_GET_CONTENT 


여기서 주의할 점은 ACTION_GET_CONTENT를 사용하라는 것!

ACTION_PICK보다 공식적으로 지원하는 것이 ACTION_GET_CONTENT라는 것, ACTION_PICK은 INTENT.setAction()의 두 번째 파라미터에 들어가는 Uri의 값을 명시적 지정하여 해당 Uri를 사용하는 앱을 호출할 때 사용한다.

Intent intentGallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

그러므로 일반적으로 앨범이란 것을 호출할 때는 딱히 사용할 필요는 없다.


그래서 ACTION_GET_CONTENT만 사용하면 된다? => 문제점이 있다.


이 함수를 통해서 startActivityForResult를 하게 되면, 앨범은 열게 되나.. 디바이스마다 갖고있는 사진첩 앱등에 대한 문제 이슈로 적절하지 못하다. 또한, 구글 계정을 통해 자동 백업등이 설정되있거나 되지 않은 앨범에 대해 잘못된 이미지를 보여줄 때가 있다.

(예 : 다운로드 받은 이미지 1장은 갤러리에 저장되었으나, 자동 백업이 설정되지 않은 포토(Google ID 연동)에는 그 사진이 보이지 않음)


또 예를 들어, 삼성폰의 경우 갤러리라는 앱과 포토라는 앱이 있다. 사용자는 처음 이 함수를 호출하면 어떤 앱을 열것인지 선택하고, 계속 사용할 것인지 아닌지에 대해 체크박스도 할 수 있다. 또한, 포토라는 앱으로 열었지만 이후에 갤러리를 바꾸고 싶다면(체크박스까지 한 상태라면) 설정에 들어가 기본 앱까지 바꿔야하는 번거로움이 있다.



이렇기 때문에, startActivity에 들어가는 intent를 createChooser를 이용하여 사용자에게 선택권을 주는 것이 좋다. 이 방법을 사용하면 어떤 디바이스라도 최근 순으로 사진이 정렬되며, 필요시 메뉴에서 포토를 쓸 것인지, 갤러리를 쓸 것인지, 구글 드라이브에서 가져올 것인지에 대해 선택권을 주고 개발자는 그에 대한 Uri값을 얻어 Path로 변환, 추출하여 업로드 등 작업을 수행하면 된다.

Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); // ACTION_PICK은 사용하지 말것, deprecated + formally intent.setType("image/*"); ((Activity)mContext).startActivityForResult(Intent.createChooser(intent, "Get Album"), REQUEST_TAKE_ALBUM);

테스트 해보면 최근순 + 메뉴로 앨범 들을 확인할 수 있다.