在Android文件系统中读取所有文件

5

我正在编写一款Android mediaPlayer应用程序,因此我想扫描整个手机上的所有文件(即sdcard和手机内存)。我可以从sdcard读取,但无法从其根目录读取。也就是说,我只能从路径/sdcard/[folder]/读取,并且它可以正常工作,但如果我进入/sdcard/,应用程序就会崩溃。如何访问sdcard上的所有文件以及手机本身上的文件?


1
你是否知道 Android 的内容解析器?如果不知道,请查看以下链接:http://developer.android.com/guide/topics/media/index.html#viacontentresolver 和 http://developer.android.com/guide/topics/providers/content-providers.html - user658042
这很有帮助,但我该如何从mediaplayer实例中调用下一首歌曲?看起来我们只是使用Uri设置了setDataSource(),但我不知道如何查看其中的所有歌曲。 - kholofelo Maloma
其实我还没有完全与整个媒体子系统一起工作过,所以我会把这个问题交给其他人来回答。但是这应该是可行的。我只是想让你知道,因为扫描整个sdcard/内存听起来像是一个低效的,浪费电池的想法,当所有文件都已经被扫描过了。编辑:搜索的一个想法:你实际上必须使用ContentResolver来查询媒体,MediaPlayer实际上只是一个播放器,它不处理管理媒体,它只是播放其中的一部分。上面的链接更详细地解释了这一点。 - user658042
1
进一步回应@alextsc所说的,Android已经费尽心思阅读了所有可用的媒体文件并构建了它们的元数据数据库。当然,它并不完美——例如在Gingerbread之前缺少专辑艺术家的最后一个版本,但在继续之前,您应该跟随他提供的链接并查看一下。 - Earl
获取专辑列表:Cusor cursor = getContentResolver().query(Albums.EXTERNAL_CONTENT_URI, new String[]{Albums._ID, Albums.ALBUM}, null, null, Albums.ALBUM + " collate nocase") 获取某个专辑的 MP3 音轨列表,按照音轨编号排序:Cursor cur = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media._ID, Media.TITLE, Media.ALBUM}, Media.ALBUM_ID + "=? and " + Media.MIME_TYPE + "=?", new String[] {albumid, "audio/mpeg"}, Media.TRACK) - Earl
这是Android Dev Blog上的一个示例教程,介绍如何制作一个样例音乐播放器,该播放器将检索用户设备上的所有音乐,希望对您有所帮助:教程链接 - HAxxor
1个回答

9

永远不要使用 /sdcard/ 路径,因为它不能保证始终可用。

请使用以下代码获取 sdcard 目录的路径。

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

从根目录位置开始,您可以构建到SD卡上任何文件的路径。例如,如果在/DCIM/Camera/a.jpg处有一张图片,则绝对路径将是rootPath +“/DCIM/Camera/a.jpg”。
但是,要列出SD卡中的所有文件,您可以使用以下代码。
String listOfFileNames[] = root.list(YOUR_FILTER);

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

假设您只想列出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();
    }
};

Shash


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接