获取一个目录的音乐文件 [英] Get music-files of one directory

查看:132
本文介绍了获取一个目录的音乐文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我们的应用程序,我们希望得到一个特定的文件夹中的音乐文件。我们要做到这一点,使用媒体商店。

因此​​,我们有一个路径到/ mnt / SD / DIR这个音乐,我们需要不的子目录中的所有文件。

我们试图使一个子查询,但它不工作。

 公开的ArrayList<宋> getAudioFilesOfDir(字符串pathDirectory)
    {
        ArrayList的<宋>歌曲=新的ArrayList<宋>();        //某些音频可能会被明确标记为不被音乐
        串选择= MediaStore.Audio.Media.IS_MUSIC + android.provider.MediaStore.Audio.Media.DATA.substring(pathDirectory.length())含有(/)= 0 AND @。        的String [] =投影{
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.TRACK,
                MediaStore.Audio.Media.YEAR,
                MediaStore.Audio.Media.DURATION,
                MediaStore.Audio.Media.ALBUM_ID,
                MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.ALBUM_KEY,
                MediaStore.Audio.Media.TITLE,
                MediaStore.Audio.Media.TITLE_KEY,
                MediaStore.Audio.Media.ARTIST_ID,
                MediaStore.Audio.Media.ARTIST
        };        ContentResolver的CR = CoreLib.Context()getContentResolver()。        光标光标= cr.query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                投影,
                选择,
                空值,
                MediaStore.Audio.Media._ID);        INT _ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
        INT DATA_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
        INT TRACK_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        INT YEAR_Column = cursor.getColumnIndex(MediaStore.Audio.Media.YEAR);
        INT DURATION_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
        INT ALBUM_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
        INT ALBUM_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
        // INT ALBUM_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_KEY);
        // INT TITLE_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        // INT TITLE_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE_KEY);
        // INT ARTIST_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID);
        INT ARTIST_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);        而(cursor.moveToNext())
        {
            宋歌=新曲();
            song.setTrackId(cursor.getInt(_ID_Column));
            song.setPathAudioFile(cursor.getString(DATA_Column));
            song.setTrackName(cursor.getString(TRACK_Column));
            song.setYearTrack(cursor.getInt(YEAR_Column));
            song.setDuration(cursor.getString(DURATION_Column));
            song.setAlbumId(cursor.getInt(ALBUM_ID_Column));
            song.setAlbumName(cursor.getString(ALBUM_Column));
            song.setArtist(cursor.getString(ARTIST_Column));            songs.add(歌曲);
        }        返回歌曲;
    }


解决方案

一个同样的问题,我一拳。如果删除 -

  MediaStore.Audio.Media.IS_MUSIC +!= 0

然后,它的工作原理。

In our app we want to get the music-files of one specific folder. We want to do this, to use the media store.

So we have a path /mnt/sd/music of this dir we will need all the files and not of the subdirs.

We tried to make a query with a substring, but it doesnt work.

public ArrayList<Song> getAudioFilesOfDir(String pathDirectory)
    {
        ArrayList<Song> songs = new ArrayList<Song>();

        //Some audio may be explicitly marked as not being music
        String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0 AND " + android.provider.MediaStore.Audio.Media.DATA.substring(pathDirectory.length()).contains("/") ;

        String[] projection = {
                MediaStore.Audio.Media._ID,
                MediaStore.Audio.Media.DATA,
                MediaStore.Audio.Media.TRACK,
                MediaStore.Audio.Media.YEAR,
                MediaStore.Audio.Media.DURATION,
                MediaStore.Audio.Media.ALBUM_ID,
                MediaStore.Audio.Media.ALBUM,
                MediaStore.Audio.Media.ALBUM_KEY,
                MediaStore.Audio.Media.TITLE,
                MediaStore.Audio.Media.TITLE_KEY,
                MediaStore.Audio.Media.ARTIST_ID,
                MediaStore.Audio.Media.ARTIST
        };

        ContentResolver cr = CoreLib.Context().getContentResolver();

        Cursor cursor = cr.query(
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                projection,
                selection,
                null,
                MediaStore.Audio.Media._ID);

        int _ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media._ID);
        int DATA_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DATA);
        int TRACK_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        int YEAR_Column = cursor.getColumnIndex(MediaStore.Audio.Media.YEAR);
        int DURATION_Column = cursor.getColumnIndex(MediaStore.Audio.Media.DURATION);
        int ALBUM_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID);
        int ALBUM_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM);
        //int ALBUM_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_KEY);
        //int TITLE_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
        //int TITLE_KEY_Column = cursor.getColumnIndex(MediaStore.Audio.Media.TITLE_KEY);
        //int ARTIST_ID_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST_ID);
        int ARTIST_Column = cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST);

        while(cursor.moveToNext())
        {
            Song song = new Song();
            song.setTrackId(cursor.getInt(_ID_Column));
            song.setPathAudioFile(cursor.getString(DATA_Column));
            song.setTrackName(cursor.getString(TRACK_Column));
            song.setYearTrack(cursor.getInt(YEAR_Column));
            song.setDuration(cursor.getString(DURATION_Column));
            song.setAlbumId(cursor.getInt(ALBUM_ID_Column));
            song.setAlbumName(cursor.getString(ALBUM_Column));
            song.setArtist(cursor.getString(ARTIST_Column));

            songs.add(song);
        }

        return songs;
    }

解决方案

A same problem punched me. If you delete -

MediaStore.Audio.Media.IS_MUSIC + " != 0

Then it works.

这篇关于获取一个目录的音乐文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆