如何从Android本地存储中获取媒体文件(图像,视频,音频)?

时间:2020-11-07 10:24:57

标签: java android

我正在制作一个音乐播放器应用程序,它将从本地存储中提取歌曲并将其显示在Recyclerview上。 我在线搜索并找到有关MediaStore类的信息,但这也需要一个API AndroidR。 因此,我想知道从Android设备中获取媒体文件的最通用方法是什么,我们可以将其应用于不同的API。

2 个答案:

答案 0 :(得分:0)

1-使用最新的Android API访问共享媒体存储变得很复杂

最通用的方法记录在这里:https://developer.android.com/training/data-storage/shared/media

对于Kotlin:

val projection = arrayOf(media-database-columns-to-retrieve)
val selection = sql-where-clause-with-placeholder-variables
val selectionArgs = values-of-placeholder-variables
val sortOrder = sql-order-by-clause

applicationContext.contentResolver.query(
    MediaStore.media-type.Media.EXTERNAL_CONTENT_URI,
    projection,
    selection,
    selectionArgs,
    sortOrder
)?.use { cursor ->
    while (cursor.moveToNext()) {
        // Use an ID column from the projection to get
        // a URI representing the media item itself.
    }
}

音频文件,存储在警报/,有声读物/,音乐/, 通知/,播客/和铃声/目录,以及 音乐/或电影/目录中的音频播放列表。的 系统将这些文件添加到MediaStore.Audio表中。

有一个视频文件示例: https://developer.android.com/training/data-storage/shared/media#query-collection

您可以将其用于更改相关查询参数的音频文件

答案 1 :(得分:0)

您需要先阅读外部存储设备:

这可能会帮助您:

public static List<File> getAllMediaFilesOnDevice(Context context) {
        List<File> files = new ArrayList<>();
        try {

            final String[] columns = { MediaStore.Images.Media.DATA,
                    MediaStore.Images.Media.DATE_ADDED,
                    MediaStore.Images.Media.BUCKET_ID,
                    MediaStore.Images.Media.BUCKET_DISPLAY_NAME };

            MergeCursor cursor = new MergeCursor(new Cursor[]{context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, null, null, null),
                    context.getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, columns, null, null, null),
                    context.getContentResolver().query(MediaStore.Images.Media.INTERNAL_CONTENT_URI, columns, null, null, null),
                    context.getContentResolver().query(MediaStore.Video.Media.INTERNAL_CONTENT_URI, columns, null, null, null)
            });
            cursor.moveToFirst();
            files.clear();
            while (!cursor.isAfterLast()){
                String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                int lastPoint = path.lastIndexOf(".");
                path = path.substring(0, lastPoint) + path.substring(lastPoint).toLowerCase();
                files.add(new File(path));
                cursor.moveToNext();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return files;
    }
相关问题