Java 如何在SD卡(eclipse、android)上查找所有音频文件
我已经有了这个代码…但我想通过子文件夹搜索,而不是通过sdcard搜索。对不起,我的英语;) 谢谢你的帮助,文曾兹Java 如何在SD卡(eclipse、android)上查找所有音频文件,java,android,eclipse,search,audio,Java,Android,Eclipse,Search,Audio,我已经有了这个代码…但我想通过子文件夹搜索,而不是通过sdcard搜索。对不起,我的英语;) 谢谢你的帮助,文曾兹 public class SongsManager { // SDCard Path final String MEDIA_PATH = new String("/sdcard/"); private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap&
public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// Constructor
public SongsManager(){
**strong text**
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
* */
public ArrayList<HashMap<String, String>> getPlayList(){
File home = new File(MEDIA_PATH);
if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) {
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
song.put("songPath", file.getPath());
// Adding each song to SongList
songsList.add(song);
}
}
// return songs list array
return songsList;
}
公共类歌曲管理器{
//SD卡路径
最终字符串媒体路径=新字符串(“/sdcard/”);
private ArrayList songsList=new ArrayList();
//建造师
公共歌曲管理器(){
**强文本**
}
/**
*从SD卡读取所有mp3文件的功能
*并将详细信息存储在ArrayList中
* */
公共阵列列表getPlayList(){
文件主目录=新文件(媒体路径);
if(home.listFiles(新文件扩展筛选器()).length>0){
对于(文件:home.listFiles(新的FileExtensionFilter())){
HashMap宋=新HashMap();
song.put(“songTitle”,file.getName().substring(0,(file.getName().length()-4));
put(“songPath”,file.getPath());
//将每首歌曲添加到歌曲列表
歌曲列表。添加(歌曲);
}
}
//返回歌曲列表数组
返回歌曲列表;
}
}此代码可能会对您有所帮助。它在SD卡中搜索歌曲(甚至在子文件夹中),并将详细信息存储在
songsList
中
ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
String[] STAR = { "*" };
Cursor cursor;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";
cursor = managedQuery(uri, STAR, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
do {
String songName = cursor
.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
String path = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.DATA));
String albumName = cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int albumId = cursor
.getInt(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
HashMap<String, String> song = new HashMap<String, String>();
song.put("songTitle",albumName+" "+songName+"___"+albumId);
song.put("songPath",path );
songsList.add(song);
} while (cursor.moveToNext());
}
}
ArrayList songsList=new ArrayList();
字符串[]星={“*”};
光标;
Uri Uri=MediaStore.Audio.Media.EXTERNAL\u CONTENT\u Uri;
字符串选择=MediaStore.Audio.Media.IS_MUSIC+“!=0”;
cursor=managedQuery(uri、星形、选择、null、null);
如果(光标!=null){
if(cursor.moveToFirst()){
做{
字符串名称=游标
.getString(游标
.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
字符串路径=游标.getString(游标
.getColumnIndex(MediaStore.Audio.Media.DATA));
String albumName=cursor.getString(cursor
.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int albumId=光标
.getInt(游标
.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
HashMap宋=新HashMap();
song.put(“songTitle”,albumName+“”+songName+“”+albumId);
歌曲。放(“歌曲路径”,路径);
歌曲列表。添加(歌曲);
}while(cursor.moveToNext());
}
}
您的问题没有直接的解决方案
您必须编写一段代码来迭代一个目录中的每个文件,如果当前文件是一个目录,则列出该目录中的所有文件,然后再次迭代该目录中的所有文件,依此类推下面类似的代码将有助于
导入java.io.File;
公共类DirectoryReader{
静态整数spc_计数=-1;
静态无效进程(文件文件){
spc_计数++;
if(aFile.isFile()){
//检查歌曲文件的逻辑
}else if(aFile.isDirectory()){
File[]listOfFiles=aFile.listFiles();
if(listOfFiles!=null){
for(int i=0;i
考虑到介质是从SD卡扫描的,您可以从MediaStore获取此信息
musiccursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, MediaStore.Audio.Media.MIME_TYPE + "= audio/mpeg", null, null);
int column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
while(musiccursor.moveToNext()){
String path = musiccursor.get(column_index);
//path is your music path, use this
}
感谢您提供了一个很好的答案,尽管managedQuery方法已被弃用,但您可以更新此答案吗?您可以使用具有相同参数的getContentResolver().query()代替弃用的managedQuery()。
musiccursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
proj, MediaStore.Audio.Media.MIME_TYPE + "= audio/mpeg", null, null);
int column_index = musiccursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
while(musiccursor.moveToNext()){
String path = musiccursor.get(column_index);
//path is your music path, use this
}