如何访问android java中的所有视频
Posted
技术标签:
【中文标题】如何访问android java中的所有视频【英文标题】:how to access all videos in android java 【发布时间】:2021-10-09 08:32:57 【问题描述】:我正在尝试访问所有视频,我需要访问所有完整或不完整的视频。我尝试了以下方法,但它只访问那些完全完整的文件。我检查了文件管理器,它包含那些不完整的文件。有什么方法可以访问所有的 mp4 文件吗?谢谢你的帮助。
public List<Items> getAllVidoes(@NotNull Context context)
List<Items> temp = new ArrayList<>();
Uri contentUri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]Environment.DIRECTORY_DOCUMENTS;
Cursor cursor = getContentResolver().query(contentUri, null, selection, selectionArgs, null);
if (cursor != null)
while (cursor.moveToNext())
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
Items item = new Items(id);
temp.add(item);
cursor.close();
return temp;
【问题讨论】:
【参考方案1】:这里的问题是您尝试查询的 Uri 仅显示具有 mimetype mp4
、mov
、mkv
等的文件,即与视频文件相关联
但是不完整的视频文件在技术上不是视频文件,所以我认为以下内容应该对您有所帮助
您应该使用 uri MediaStore.Files.getContentUri("external")
而不是 MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
例如,我需要访问 Documents
目录中名为 Kamen Rider Decade
的目录
Uri contentUri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]Environment.DIRECTORY_DOCUMENTS;
Cursor cursor = getContentResolver().query(contentUri, null, selection, selectionArgs, null);
您可以通过相同的逻辑获取此位置的文件的 ID,但只需稍作修改
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
您可以在 while(cursor.movetonext()
中使用的 while 循环中重复此操作
然后你可以把这个 id 添加到你的 items 对象中
Items item = new Items(id);
【讨论】:
我已经尝试按照你说的做,但它返回一个空列表。我已经在上面编辑了,你能检查一下出了什么问题。 我用过 Environment.getRootDirectory() + "/storage/";为了访问这些项目,但仍然没有结果。 请正确检查目录,并手动记录 uri。我以前使用过这段代码,它完全按照预期工作 已经检查过了。上面的selectionArgs
返回/system/storage/
,item
给出[]
。
你想访问哪个目录?以上是关于如何访问android java中的所有视频的主要内容,如果未能解决你的问题,请参考以下文章
如何从 java / android 中的嵌套 json 对象访问数据? [复制]
如何使用适用于 Android 的 OpenCV 减少实时视频序列中的运动效果?
java.lang.OutOfMemoryError: Failed to allocate a 3110419 byte allocation with 741152 free bytes and(