从文件夹中获取所有音频文件

时间:2013-03-04 14:24:09

标签: android

如何使用managedQuery()从android中的特定文件夹中获取所有音频文件。表示在managedQuery()中应该使用where子句来过滤Cursor结果。

代码是:

String[] proj = { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.DURATION };
Cursor cursor = managedQuery(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,proj, /*where clause here*/, null, null);

3 个答案:

答案 0 :(得分:4)

IS_MUSIC!= 0 AND DATA LIKE'/ dir /%':

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " +
            MediaStore.Audio.Media.DATA + " LIKE '/mnt/sdcard/Music/SomeArtist/%'";

这会将您的managedQuery结果限制为... / SomeArtist / dir。

答案 1 :(得分:2)

我希望您检查文件的扩展名,以检查它是否是上述代码中的媒体文件

public class ReadAllFilesFromPathActivity extends Activity {
private List<String> myList;
File file;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView = (ListView) findViewById(R.id.mylist);
myList = new ArrayList<String>();

File directory = Environment.getExternalStorageDirectory();
file = new File( directory + "/Test" );
File list[] = file.listFiles();

for( int i=0; i< list.length; i++)
{
    if(checkFileExtension( list[i].getName() )
    {
         myList.add( list[i].getName() );
    }
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, android.R.id.text1, myList);
listView.setAdapter(adapter); //Set all the file in the list.
}
}

并添加以下方法来检查扩展名。扩展名已添加到枚举

private boolean checkExtension( String fileName ) {
    String ext = getFileExtension(fileName);
    if ( ext == null) return false;
    try {
        if ( SupportedFileFormat.valueOf(ext.toUpperCase()) != null ) {
            return true;
        }
    } catch(IllegalArgumentException e) {
        return false;    
    }
    return false; 
}

public String getFileExtension( String fileName ) {
    int i = fileName.lastIndexOf('.');
    if (i > 0) {
        return fileName.substring(i+1);
    } else 
        return null;
}

和受支持扩展程序的枚举(您也可以添加自己的扩展程序)

public enum SupportedFileFormat
{
    _3GP("3gp"),
    MP4("mp4"),
    M4A("m4a"),
    AAC("aac"),
    TS("ts"),
    FLAC("flac"),
    MP3("mp3"),
    MID("mid"),
    XMF("xmf"),
    MXMF("mxmf"),
    RTTTL("rtttl"),
    RTX("rtx"),
    OTA("ota"),
    IMY("imy"),
    OGG("ogg"),
    MKV("mkv"),
    WAV("wav");

    private String filesuffix;

    SupportedFileFormat( String filesuffix ) {
        this.filesuffix = filesuffix;
    }

    public String getFilesuffix() {
        return filesuffix;
    }
}

这是一些代码,但可以帮助你

答案 2 :(得分:0)

这是我的代码,正在使用我的特定目录路径

我做了一个光标,并借助它找到了目录中的所有歌曲。

DOWNLOAD_FILE_DIR拥有我目录的路径

String DOWNLOAD_FILE_DIR = public static final  String DOWNLOAD_FILE_DIR = Environment.getExternalStorageDirectory().getPath() + "/MYDIR";

这是查找该目录中歌曲的查询。

String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " +
        MediaStore.Audio.Media.DATA + " LIKE '"+DOWNLOAD_FILE_DIR+"/%'"

这将返回一个游标。

context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                null, selection, null, null);