[Android] MediaStore DATE_TAKEN column return 0

^--^·2022년 2월 1일
0

MediaStore.MediaColumns 이슈

기존 코드를 Android30에 맞춰 대응하던 중 만났던 이슈로, contentResolver.query로 갤러리 이미지를 불러올 때 사용하던 DATE_TAKEN 칼럼 값이 항상 0이 반환되어 이미지의 날짜가 1970년 1월 1일로 보여지는 이슈였다. 테스트해보니 9.0기기에서도 발생했고, 그 미만 버전에서는 발생하지 않았다.

공식문서를 확인해보니 이전버전부터 사용되고있었던 DATE_TAKEN 칼럼이 Api level 29에 추가됐다고 표기되어 있는걸로 보아 29버전으로 바뀌면서 무언가 변경이 있었던 것 같다.

일단,
DATE_TAKEN 칼럼의 정의는 "1970년 1월 1일 이후로 미디어 항목을 촬영한 날짜 및 시간"이며 milliseconds 형식이다.

이전에 어떤 값을 내려줬는지는 확인해봐야겠지만 29버전부터는 정의에 맞게 해당 디바이스에서 촬영한 사진에만 값을 내려주고있음을 확인했다.
현재 작업중인 앱에서는 카메라 앨범 뿐만 아니라 외부 저장소의 모든 이미지를 보여주기 때문에 수정이 필요하였고, MediaStore의 다른 칼럼들을 찾아보았다.

DATE_TAKEN 이외에 MediaStore.MediaColumns 에 날짜와 관련된 칼럼은 3가지로

  • DATE_ADDED (초)
  • DATE_EXPIRED
  • DATE_MODIFIED (초)

인데, 인터넷에서 다운로드 받은 이미지에도 DATE_ADDED, DATE_MODIFIED 칼럼의 값이 존재하는 걸 확인하여, 데이터가 처음으로 추가된 시간을 seconds 형식으로 나타내는 DATE_ADDED 값을 이용하여 DATE_TAKEN을 대체할 수 있었다.

해당 날짜 데이터를 민감하게 처리할 필요는 없어서 DATE_ADDED 칼럼으로 바꿔줌으로써 바로 처리가 됐지만 milliseconds 형식이 필요하여 DATE_TAKEN을 사용했다면 고려할 사항이 더 많아질 수 있을 것 같다.

요약

기존에 사용하던 MediaStore의 DATE_TAKEN 칼럼이 29부터 해당 디바이스에서 촬영한 사진일 경우만 값을 내려주고있음. DATE_TAKEN 대신 파일이 추가된 날짜를 나타내는 DATE_ADDED 칼럼의 값을 이용하여 대체함


Reference

Android developer
https://developer.android.com/

profile
안드로이드 개발자

0개의 댓글