代码之家  ›  专栏  ›  技术社区  ›  Eyjafl

访问由我的应用程序创建的文件

  •  0
  • Eyjafl  · 技术社区  · 3 年前

    我在用 MediaStore 要在Android上创建文件,我需要访问它们以进行阅读。我该怎么做?

    有没有办法查询我的所有文件,或者通过应用程序所有者筛选它们 ContentResolver 不知何故,或者我可以在创建时标记我的文件,以便以后按此标记过滤它们?


    我的代码:

    val resolver: ContentResolver = /* Is passed as an argument */
    val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
    } else MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
    
    fun createFile(): Uri? {
        val fileDetails = ContentValues().apply {
            put(MediaStore.Audio.Media.DISPLAY_NAME, "example.aac")
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
                put(MediaStore.Audio.Media.IS_PENDING, 1)
        }
    
        return resolver.insert(collection, fileDetails)
    }
    
    /* Between calling these two functions I also set `IS_PENDING` to 0 */
    
    fun findRecordings(): List<MyFile> {
        val projection = arrayOf(
            MediaStore.Audio.Media._ID,
            /* ... */
        )
        val selection = /* Filter to only get the files created by my app */
        val selectionArgs = /* ... */
        val sortOrder = /* ... */
    
        val files = mutableListOf<MyFile>()
    
        resolver.query(collection, projection, selection, selectionArgs, sortOrder)?.use { cursor ->
            val idColumn = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)
            /* Other columns */
    
            while (cursor.moveToNext()) {
                val id = cursor.getLong(idColumn)
                /* Other data */
    
                val uri = ContentUris.withAppendedId(collection, id)
    
                files += MyFile(uri, /* ... */)
            }
        }
    
        return files
    }
    
    0 回复  |  直到 3 年前
        1
  •  0
  •   Eyjafl    3 年前

    解决方案是创建一个子文件夹并将我的文件保存在那里。为此我用了 MediaStore.Audio.Media.RELATIVE_PATH 在…上 >= Build.VERSION_CODES.Q MediaStore.Audio.Media.DATA 在其他版本的Android上。