Как получить доступ к содержимому в папке dowloads в Android Q с помощью ContentResolver

#android #android-contentprovider #mediastore

#Android #android-contentprovider #mediastore

Вопрос:

Я запускаю намерение перейти в папку загрузки в Android, и я могу выбрать элемент, но я не могу получить путь к этому элементу, чтобы запустить его в видео Mediaplayer.

Я получаю этот uri в намерении:

 content://com.android.providers.downloads.documents/document/29
 

И я пытаюсь получить доступ к пути к видео таким образом:

 @RequiresApi(Build.VERSION_CODES.Q)
    fun getVideo(context: Context, urip: Uri) {
        val SELECTION_ARGS = ")%"
        val LIKE = " like?"
        val projection = arrayOf(MediaStore.Video.Media._ID)
        val selection = MediaStore.Video.Media.DATA   LIKE
        val selectionArgs = arrayOf(SELECTION_ARGS)

        context.contentResolver.query(
            MediaStore.Downloads.INTERNAL_CONTENT_URI,
            projection,
            selection,
            selectionArgs,
            null
        )?.use { cursor ->
            while (cursor.moveToNext()) {
                val file = cursor.getString(0)
            }
        }
    }
 

Но у курсора нет никакого элемента.

Комментарии:

1. Вы можете получить входной поток выбранного видеофайла следующим образом: context.ContentResolver.openInputStream (uri). Затем сохраните этот поток в виде файла в папке кэша приложений и используйте его в медиаплеере.

2. Не могли бы вы привести минимальный пример этого, пожалуйста!

3. забавный SaveToFile(videoUri: Uri, fileName: String) { val file = File(«${context.CacheDir}${File.separator}$fileName») openInputStream(videoUri).используйте { input -> val OutputStream = openFileOutputStream(file) OutputStream.используйте { output -> val buffer= ByteArray(4 * 1024) while (true) { значение байтового счета = ввод.чтение (буфер), если (байтовый счет < 0) прерывает вывод.запись (буфер, 0, байтовый счет) } вывод. flush() } } }

4. Используете ли вы VideoView для загрузки и воспроизведения видео?

5. Медиаплеер @SamChen