无法从存储中获取所有视频文件 Android
Unable to get all Video files from storage Android
我正在使用以下方法从存储中获取视频文件。它只检索目录文件,但不读取子目录文件中的文件。
示例:- 我可以从 WhatsApp Video
读取文件,但在同一文件夹中有一个子文件夹名称 sent
我无法读取里面的文件。
任何帮助,我如何读取所有文件夹和子文件夹
public class GetVideos {
@RequiresApi(api = Build.VERSION_CODES.Q)
public void getAllVideosData(Context context, ArrayList<VideoViewInfo> AllVideosData) {
String[] projection = new String[] {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.TITLE,
MediaStore.Video.VideoColumns.DATA,
MediaStore.Video.Media.BUCKET_DISPLAY_NAME,
MediaStore.Video.Media.DATE_TAKEN,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.RESOLUTION,
MediaStore.Video.Media.SIZE
};
Uri Video = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String orderBy = MediaStore.Video.Media.DATE_TAKEN;
@SuppressLint("Recycle")
Cursor cur = context.getContentResolver().query(Video, projection,null,null,orderBy );
assert cur != null;
Log.i("ListingVideo"," query count=" + cur.getCount());
if (cur.moveToNext()) {
String id;
String title;
String filePath;
String bucketName;
String date;
String duration;
String resolution;
String size;
int tempId = cur.getColumnIndex(MediaStore.Video.Media._ID);
int titleTemp = cur.getColumnIndex(MediaStore.Video.Media.TITLE);
int filePathTemp = cur.getColumnIndex(MediaStore.Video.Media.DATA);
int bucketTemp = cur.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
int dateTemp = cur.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN);
int durationTemp = cur.getColumnIndex(MediaStore.Video.Media.DURATION);
int resolutionTemp = cur.getColumnIndex(MediaStore.Video.Media.RESOLUTION);
int sizeTemp = cur.getColumnIndex(MediaStore.Video.Media.SIZE);
do {
id = cur.getString(tempId);
title = cur.getString(titleTemp);
filePath = cur.getString(filePathTemp);
bucketName = cur.getString(bucketTemp);
date = cur.getString(dateTemp);
duration = cur.getString(durationTemp);
resolution = cur.getString(resolutionTemp);
size = cur.getString(sizeTemp);
Log.d(TAG, "getAllVideosData: "+bucketName);
VideoViewInfo vvi = new VideoViewInfo(id, title, filePath, bucketName, date, duration, resolution, size);
AllVideosData.add(vvi);
} while (cur.moveToNext());
}
}
}
我应该怎么做才能获得我存储中的所有视频文件?
Bountry reward
i want to read every video file from storage
with above code i can only read files limited location as per MediaStore.Video
您可以运行一个递归函数来列出所有视频文件,例如
void findVideos(File dir, ArrayList<String> list){
for (File file : dir.listFiles()) {
if (file.isDirectory()) findVideos(file, list);
else if(file.getAbsolutePath().contains(".mp4")) list.add(file.getAbsolutePath());
}
}
或者您可以像在此存储库中那样查询 mediastore here
It's really hard and full of a mess when doing file handling
因为您只访问文件,但是其中的子目录呢?在
的情况下
@Kursh 的回答递归也无济于事
因为它会深入子目录,永远不会回来18=]ASYNC TAK 或 协程
我正在使用以下方法从存储中获取视频文件。它只检索目录文件,但不读取子目录文件中的文件。
示例:- 我可以从 WhatsApp Video
读取文件,但在同一文件夹中有一个子文件夹名称 sent
我无法读取里面的文件。
任何帮助,我如何读取所有文件夹和子文件夹
public class GetVideos {
@RequiresApi(api = Build.VERSION_CODES.Q)
public void getAllVideosData(Context context, ArrayList<VideoViewInfo> AllVideosData) {
String[] projection = new String[] {
MediaStore.Video.Media._ID,
MediaStore.Video.Media.TITLE,
MediaStore.Video.VideoColumns.DATA,
MediaStore.Video.Media.BUCKET_DISPLAY_NAME,
MediaStore.Video.Media.DATE_TAKEN,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.RESOLUTION,
MediaStore.Video.Media.SIZE
};
Uri Video = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String orderBy = MediaStore.Video.Media.DATE_TAKEN;
@SuppressLint("Recycle")
Cursor cur = context.getContentResolver().query(Video, projection,null,null,orderBy );
assert cur != null;
Log.i("ListingVideo"," query count=" + cur.getCount());
if (cur.moveToNext()) {
String id;
String title;
String filePath;
String bucketName;
String date;
String duration;
String resolution;
String size;
int tempId = cur.getColumnIndex(MediaStore.Video.Media._ID);
int titleTemp = cur.getColumnIndex(MediaStore.Video.Media.TITLE);
int filePathTemp = cur.getColumnIndex(MediaStore.Video.Media.DATA);
int bucketTemp = cur.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME);
int dateTemp = cur.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN);
int durationTemp = cur.getColumnIndex(MediaStore.Video.Media.DURATION);
int resolutionTemp = cur.getColumnIndex(MediaStore.Video.Media.RESOLUTION);
int sizeTemp = cur.getColumnIndex(MediaStore.Video.Media.SIZE);
do {
id = cur.getString(tempId);
title = cur.getString(titleTemp);
filePath = cur.getString(filePathTemp);
bucketName = cur.getString(bucketTemp);
date = cur.getString(dateTemp);
duration = cur.getString(durationTemp);
resolution = cur.getString(resolutionTemp);
size = cur.getString(sizeTemp);
Log.d(TAG, "getAllVideosData: "+bucketName);
VideoViewInfo vvi = new VideoViewInfo(id, title, filePath, bucketName, date, duration, resolution, size);
AllVideosData.add(vvi);
} while (cur.moveToNext());
}
}
}
我应该怎么做才能获得我存储中的所有视频文件?
Bountry reward i want to read every video file from storage with above code i can only read files limited location as per
MediaStore.Video
您可以运行一个递归函数来列出所有视频文件,例如
void findVideos(File dir, ArrayList<String> list){
for (File file : dir.listFiles()) {
if (file.isDirectory()) findVideos(file, list);
else if(file.getAbsolutePath().contains(".mp4")) list.add(file.getAbsolutePath());
}
}
或者您可以像在此存储库中那样查询 mediastore here
It's really hard and full of a mess when doing file handling
因为您只访问文件,但是其中的子目录呢?在
@Kursh 的回答递归也无济于事
因为它会深入子目录,永远不会回来18=]ASYNC TAK 或 协程