#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