android - 如何在android中同时查询外部和内部存储

标签 android storage media

我想从存储卡和手机内存中获取所有媒体文件/歌曲的列表。有什么办法可以做到这一点吗? 谢谢。

最佳答案

内容解析方式--> MediaStore.Audio

通过内容解析器查询内容提供者 实现合适的ListView,并通过Adapter将查询内容解析器后得到的数据添加到ListView

    String[] columns = { android.provider.MediaStore.Audio.Albums._ID,
    android.provider.MediaStore.Audio.Albums.ALBUM };
    cursor = managedQuery(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI,columns, null, null, null);
    String[] displayFields = new String[] { MediaStore.Audio.Albums.ALBUM };
    int[] displayViews = new int[] { android.R.id.text1 };
   setListAdapter(new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1, cursor, displayFields,displayViews));

传统方式::扫描SD卡中的.mp3文件

使用下面的代码获取SD卡目录的路径。

File root = Environment.getExternalStorageDirectory();
String rootPath= root.getPath();

从 rootPath 位置,您可以构建 SD 卡上任何文件的路径。例如,如果 /DCIM/Camera/a.jpg 处有图像,则绝对路径将为 rootPath + "/DCIM/Camera/a.jpg"。

但是要列出SDCard中的所有文件,您可以使用以下代码

String listOfFileNames[] = root.list(YOUR_FILTER);

listOfFileNames 将包含 SD 卡中存在的所有文件的名称,并通过过滤器设置的条件。

假设您只想列出 mp3 文件,然后将以下过滤器类名称传递给 list() 函数。

FilenameFilter mp3Filter = new FilenameFilter() {
File f;
public boolean accept(File dir, String name) {

    if(name.endsWith(".mp3")){
    return true;
    }

    f = new File(dir.getAbsolutePath()+"/"+name);

    return f.isDirectory();
  }
};

关于android - 如何在android中同时查询外部和内部存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14158884/

相关文章:

android - 检查字符串是否仅包含 "+"符号和数字

java - android实时获取声音频率?

android - 数据绑定(bind) : Choose one of string resources depends on condition

javascript - 将数据永久存储在变量中(javascript)

android - 如何向存储访问框架表明我不再需要加载动画?

java - Android 应用程序在打开时立即崩溃

ios - 下载图像,然后从 Firebase Swift 3 缓存它

未执行 android broadcastreceviver onreceive 操作

javascript - 使用 MediaStream Recording API 进行最低延迟音频播放/监控的一组好的约束是什么?

javascript - 分享/点赞后在Twitter/Facebook/Instagram上显示<div>