안드로이드

[Android] MediaStore에서 미디어 파일 정보 읽는 방법

코딩하는후운 2024. 3. 20. 13:15
반응형

MediaStore에서 미디어 파일 정보 읽는 방법

 

Media Provider와 MediaStore라는 용어에 대해 알아야 한다.

  • Media Provider
    단말에 저장된 이미지, 동영상, 오디오 파일의 정보를 제공하는 프로바이더 입니다.
    이 프로바이더에게 찾고 싶은 종류의 데이터를 쿼리할 수 있습니다.
  • Media Store
    앱이 Media Provider가 제공하는 파일들을 접근할 수 있도록 도와주는 API들의 묶음입니다.
    쿼리에 필요한 데이터들이 정의되어 있습니다.

따라서, 우리는 MediaStore의 API들이 어떤 의미인지 이해하고, 그 API를 통해 Media Provider에 쿼리를 하여 데이터를 얻으면 됩니다.

 

Android 10(Q)이상 Scoped Storage 부분은 다루지 않겠습니다.

 

권한

MediaStore에서 파일을 읽으려면 READ권한이 필요합니다. (READ_EXTERNAL_STORAGE)

 

이미지 쿼리

MediaStore로 디바이스에 있는 이미지들을 쿼리하는 코드는 다음과 같습니다.

//간혹 MediaStore.Images부분을 다르게 할 때가 있음 잘 확인 하기(Video등등)

val projection = arrayOf(

    MediaStore.Images.Media._ID,

    MediaStore.Images.Media.DISPLAY_NAME,

    MediaStore.Images.Media.DATA_TAKEN

)

 

val selection = "${MediaStore.Images.Media.DATE_TAKEN} >= ?"

//dateToTimestamp는 SimpleDateFormat으로 가져온 dateformat이다.

val selectionArgs = arrayOf(

    dateToTimestamp(day =1, month = 1, year = 1970).toString()

)

 

val sortOrder = "${MediaStore.Images.Media.DATE_TAKEN} DESC"

 

val cursor = contentResolver.query(

    MediaStore.Images.Media.EXTERNAL_CONTENT_URI,

    projection,

    selection,

    selectionArgs,

    sortOrder

)

 

query각각 인자의 의미

  • Uri: 찾고자 하는 데이터의 Uri
  • Projection: DB의 column과 같습니다. 결과로 받고 싶은 데이터의 종류
  • Selection: DB의 where 키워드와 같습니다. 조건으로 필터링된 결과를 받을 때 사용
  • Selection args: Selection과 함께 사용
  • Sort order: 쿼리 결과 데이터를 sort

결과

위의 조건으로 쿼리한 데이터가 있다면 Cursor로 결과를 순회(Loop)할 수 있습니다.

cursor?.use {

    val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)

    val dateTakenCoumn = 생략

    val displayNameColumn = 생략

 

    while(cursor.moveToNext()) {

        val id = cursor.getLong(idColumn)

        val dateTaken = 생략

        val displayName = 생략

        val contentUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id.toString())    

    }

}

 

Column의 리턴 타입에 맞게 API를 사용하면 된다.

 

 

출처:

https://codechacha.com/ko/android-mediastore-read-media-files/

반응형