안드로이드

Android 갤러리 contentResolver DATE_TAKEN 문제

코딩하는후운 2023. 5. 10. 16:59
반응형

Android 갤러리 contentResolver query시 DATE_TAKEN 및 DATE_ADD가 제대로 들어있지 않은 문제가 발생.

이슈 발생은 : 폰을 변경하거나 이미지를 옮겨서 가져온 경우에 발생하는 것 같다.

이것저것 가져와서 로그를 찍어보니

date_taken, date_add, date_modified 등 DATE format으로 보니 1970년 1월로 찍혔습니다.
(사진에 따라 day 값이 좀더 포함된 경우가 있음.)

기존 로직에서 1970/01/30 보다 작을 경우에는 파일의 lastModified날짜를 가져와서 sort시켜줬는데

나중에 리스트 insert가 다되고 notifychanged하는 부분에서 사진들의 정렬이 바뀌어 문제가 생겼다.

검색하다보니 
DATE_TAKEN 칼럼이 Api level 29에 추가됐다고 표기되어 있는걸로 보아 29버전으로 바뀌면서 무언가 변경이 있었던 것 같다.
라는 글을 보았지만 실제 나의 상황은 date_taken에도 들어오는 경우도 있음.(이 문제는 아닌것 같음)

https://velog.io/@seoon53/Android-MediaStore-DATETAKEN-column-return-0

 

[Android] MediaStore DATE_TAKEN column return 0

기존 코드를 Android30에 맞춰 대응하던 중 만났던 이슈로, contentResolver.query로 갤러리 이미지를 불러올 때 사용하던 DATE_TAKEN 칼럼 값이 항상 0이 반환되어 이미지의 날짜가 1970년 1월 1일로 보여지는

velog.io

 

카톡에서도 보니 카톡도 제대로 정렬이 되어 있지는 않았다.(문제되는 폴더)
그래서 일단 contentResolver로는 제대로 정렬을 하기 어려울 것 같아서

sort하는 부분에 조건을 여러개 걸어서 쿼리해 가져오도록 하였다.

val sort = MediaStore.MediaColumns.DATE_TAKEN + " DESC, " +
    MediaStore.MediaColumns.DATE_ADDED + " DESC, " +
    MediaStore.MediaColumns._ID + " DESC"

 

아! 그리고 보다보니

contentResolver.query로 이미지를 여러개 가져오는데 화면을 빠져나가도 while문이 계속돌아서
isFinish값 처리도 같이 해주었다.

지금 상황에선 최선의 방법인것 같았다.

혹시 좋은 방법이나 해결법 있으시면 댓글로 알려주시면 감사하겠습니다!!

 

반응형