簡體   English   中英

如何從 Android 本地存儲中獲取媒體文件(圖像、視頻、音頻)?

[英]How to fetch media files (Images,videos,audio) from Android local storage?

我正在制作一個音樂播放器應用程序,它將從本地存儲中獲取歌曲並將它們顯示在 Recyclerview 上。 我在網上搜索並找到了 MediaStore Class ,但這也需要一個 API Android R。因此,我想知道從 android 設備獲取媒體文件的最通用方法是什么,我們可以跨不同的 API 應用它。

1- 使用最近的 Android API 訪問共享媒體存儲變得復雜

最通用的方法記錄在這里: https : //developer.android.com/training/data-storage/shared/media

對於科特林:

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.
    }
}

音頻文件,存儲在 Alarms/、Audiobooks/、Music/、Notifications/、Podcasts/ 和 Ringtones/ 目錄中,以及位於 Music/ 或 Movies/ 目錄中的音頻播放列表。 系統將這些文件添加到 MediaStore.Audio 表中。

有一個視頻文件的例子: https : //developer.android.com/training/data-storage/shared/media#query-collection

您可以將其用於更改相關查詢參數的音頻文件

您需要先讀取外部存儲:

這可能會幫助您:

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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM