[英]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.