2011-08-11 42 views
4

我在编写Android mediaPlayer应用程序,因此我想扫描整个手机上的所有文件(即sdcard和手机存储器)。我可以从SD卡读取,但不能读取它的根。也就是说,我可以从路径/sdcard/[folder]/中读取,它工作正常,但如果我去/sdcard/该应用程序崩溃。我如何访问SD卡上的所有文件以及手机本身的文件?读取Android文件系统中的所有文件

+1

你知道机器人会内容解析器?如果你不是这样,请检查:http://developer.android.com/guide/topics/media/index.html#viacontentresolver和http://developer.android.com/guide/topics/providers/content-providers.html – 2011-08-11 17:48:06

+0

这是有帮助的,但我怎样才能从mediaplayer实例调用下一首歌曲?它看起来像我们使用Uri设置数据源(),但我不知道如何看到那里的所有歌曲 –

+0

其实我没有工作整个媒体子系统还有很多,所以我会把它传给别人来回答。但这应该是可行的。我只是想让你知道,因为扫描整个SD卡/内存听起来像是一个没有效率的,电池浪费的想法,当所有的文件已经为你扫描。编辑:只是一个搜索的想法:你实际上必须使用ContentResolver来查询媒体,MediaPlayer实际上只是一个播放器,它不处理管理媒体,它只是播放其中的一部分。上面的链接解释了一点。 – 2011-08-11 17:57:54

回答

9

切勿使用/ sdcard /路径。它不保证一直工作。

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

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

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

但是列出的SD卡中的所有文件,可以使用下面的代码

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

词shash

+0

谢谢soo much .... 。 非常感激 –