如何列出外部存储中的图像和视频?

时间:2018-11-13 02:07:53

标签: java android

我正在尝试列出外部存储中的图像和视频。我的代码是:

private void parseAllImages() {
    try {
        String[] projection = {MediaStore.Images.Media.DATA};
        @SuppressLint("Recycle")
        Cursor cursor = getActivity().getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                projection,
                MediaStore.Images.Media.DATA + " like ? ",
                new String[]{"%/DCIM/Camera%"},
                null);

        int size = 0;
        if (cursor != null) {
            size = cursor.getCount();
        }

        if (size == 0) {
            getActivity().runOnUiThread(new Runnable() {
                public void run() {
                    Toast.makeText(getContext(), getString(R.string.data_not_found), Toast.LENGTH_LONG).show();
                }
            });
        } else {
            while (cursor.moveToNext()) {
                int file_ColumnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                String path = cursor.getString(file_ColumnIndex);
                String fileName = path.substring(path.lastIndexOf("/") + 1, path.length());
                MediaInfoModel mediaFileInfo = new MediaInfoModel();
                mediaFileInfo.setFilePath(path);
                mediaFileInfo.setFileName(fileName);
                mediaFileInfo.setFileType(type);
                mediaList.add(mediaFileInfo);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

我可以使用此代码列出视频或图像。但是我不知道如何一起列出图像和视频。有想法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

将查询网址更改为MediaStore.Files.getContentUri("external")。该URL包含所有文件,但是您可以使用MediaType过滤数据。 您可以通过在选择参数中添加MediaStore.Files.FileColumns.MEDIA_TYPE + " = ? OR " + MediaStore.Files.FileColumns.MEDIA_TYPE + " = ? "来对其进行过滤。

答案 1 :(得分:0)

您可以设置多种类型,扩展mediaList以支持多种文件格式,并根据类型分配不同的布局。

例如:

switch(mediaList.get(index).getType){
    case VIDEO:
          //show video layout
       break;
    case IMAGE:
          //show image layout
       break;
    case OTHER:
          //show other layout
       break;
}