티스토리 뷰

앱 개발 기간이 길어지다 보니 중간에 변경되는 부분이 많이 있네요.

파일경로 가져오는게 deprecate되고... 또 검색해서 작업을 진행하게 되었네요.

 

알고있는 정보는 파일이름.

파일을 복사하기 위해 외부저장경로의 파일경로.

 

filename으로 외부저장경로에 저장되어있는 파일 uri를 가져오고,

getUriToFileString() 함수로 파일 경로를 가져옵니다.

 

    val c: Cursor? = mContext.contentResolver.query(MediaStore.Downloads.EXTERNAL_CONTENT_URI, null, "${MediaStore.MediaColumns.DISPLAY_NAME}=?", arrayOf(filename), null)

    if (c == null) {
        showToast("다운로드한 파일이 없습니다.")
        return false
    }

    c.moveToNext()
    val cursorId = c.getColumnIndex(MediaStore.MediaColumns._ID)
    if (cursorId < 0) {
        showToast("다운로드한 파일이 없습니다.")
        return false
    }
    val id = c.getString(cursorId)
    c.close()

    val uri = ContentUris.withAppendedId(MediaStore.Downloads.EXTERNAL_CONTENT_URI, id.toLong())

    val externalUri = AppUtil.getUriToFileString(mContext, uri)

    val externalFile = File(externalUri.toString())

 

getUriToFileString() 함수

fun getUriToFileString(context: Context, uri: Uri): String? {
    val urlSplit = uri.toString().split("/")

    val contentUri = try {
                    when (urlSplit[3]) {
                        "internal" -> MediaStore.Images.Media.INTERNAL_CONTENT_URI
                        "external" -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                        else -> MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                    }
                } catch (ex: Exception) {
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI
                }

    val selection = "_id=?"
    val selectionArgs = arrayOf(
        urlSplit[urlSplit.size-1]
    )

    return getDataColumn(context, contentUri, selection, selectionArgs)
}