如何在 api 级别 29 中使用 MediaStore API 获取 pdf uri?

Sau*_*age 6 android mediastore

我正在使用媒体商店在回收站视图中列出 pdf。它在android 10 之前都可以正常工作,也可以在 android 11 中运行,但只能在 android 10 中运行。

我也在requestLegacyExternalStorage=true清单中设置了。

build.gradle

  compileSdkVersion 29
  buildToolsVersion "30.0.2"
  minSdkVersion 21
  targetSdkVersion 29
Run Code Online (Sandbox Code Playgroud)

获取PDF.kt

 class FetchPdf(private val applicationContext: Context) {
        private val arrayList = ArrayList<Pdf>()
    
        fun getPdf(): ArrayList<Pdf> {
    
            val collection = MediaStore.Files.getContentUri("external")
            val projection = arrayOf(
                    MediaStore.Files.FileColumns._ID,
                    MediaStore.Files.FileColumns.DATE_MODIFIED,
                    MediaStore.Files.FileColumns.DISPLAY_NAME,        
                    MediaStore.Files.FileColumns.SIZE,
                    MediaStore.Files.FileColumns.DATA
            )
    
            val mimeType = "application/pdf"
    
            val whereClause = MediaStore.Files.FileColumns.MIME_TYPE + " IN ('" + mimeType + "')"
            val orderBy = MediaStore.Files.FileColumns.DATE_MODIFIED + " DESC"
            val cursor: Cursor? = applicationContext.contentResolver.query(
                    collection,
                    projection,
                    whereClause,
                    null,
                    orderBy
            )
            if (cursor != null) {
                val idCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)
               val nameCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME)
                val sizeCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE)
                val dataCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)
                if (cursor.moveToFirst()) {
                    do {
                        val fileUri: Uri = Uri.withAppendedPath(
                                MediaStore.Files.getContentUri("external"),
                                cursor.getString(idCol)
                        )
                        val name = cursor.getString(nameCol)
                        val data = cursor.getString(dataCol)
                        val size = cursor.getLong(sizeCol)
                        if (size == 0L) continue
                        arrayList.add(Pdf(name, fileUri.toString(), data))
    
                    } while (cursor.moveToNext())
                }
                cursor.close()
            }
            return arrayList
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题仅发生在 android 10 中。在 android 11 中工作正常

cursor.moveToFirst() 返回 false

它正在返回 arrayList 大小 0

我尝试过的:

我试图改变 MediaStore.Files.FileColumns.DATAMediaStore.Files.FileColumns.RELATIVE_PATH不工作

我尝试递归遍历每个文件夹然后它的工作,但我想要MediaStore解决方案

任何帮助,将不胜感激。