MediaStore列出来自特定路径的所有歌曲

问题描述 投票:3回答:4

我想从设备上的特定路径获取所有歌曲。在一个示例中,我想从路径“ / mnt / sdcard / music /”的一个特定文件夹“ music”中获取所有歌曲,我需要在代码中进行哪些更改才能实现此目的?我有这种方法可以从设备中获取所有歌曲:

public ArrayList<Song> scanAllSongsOnDevice(Context c)
    {
        ContentResolver musicResolver = c.getContentResolver();
        Uri musicUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String col[] ={android.provider.MediaStore.Audio.Media._ID};
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);


        if (musicCursor != null && musicCursor.moveToFirst())
        {
            // clear  list to prevent duplicates
            songsList = new ArrayList<>();

            //get columns
            int titleColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.TITLE);
            int idColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media._ID);
            int artistColumn = musicCursor.getColumnIndex
                    (android.provider.MediaStore.Audio.Media.ARTIST);
            int isMusicColumn = musicCursor.getColumnIndex
                    (MediaStore.Audio.Media.IS_MUSIC);
            int duration = musicCursor.getColumnIndex
                    (MediaStore.Audio.Media.DURATION);

            //add songs to list
            do
            {
                String filePath = musicCursor.getString(musicCursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                // check if the file is a music and the type is supported
                if (musicCursor.getInt(isMusicColumn) != 0 && filePath != null && (FileExtensionFilter.checkValidExtension(filePath)) && musicCursor.getInt(duration) > 0)
                {
                    int thisId = musicCursor.getInt(idColumn);
                    String thisTitle = musicCursor.getString(titleColumn);
                    String thisArtist = musicCursor.getString(artistColumn);
                    Song song = new Song();
                    song.setId(thisId);
                    if(!thisArtist.equals("<unknown>"))
                    {
                        song.setArtist(thisArtist);
                        song.setTitle(thisTitle);
                    }
                    else
                    {
                        song.setArtist("");
                        song.setTitle("");
                    }
                    song.setSongPath(filePath);
                    File file = new File(filePath);
                    song.setFileName(file.getName().substring(0, (file.getName().length() - 4)));
                    songsList.add(song);
                }
            }
            while (musicCursor.moveToNext());
        }
        else  // if we don't have any media in the folder that we selected set NO MEDIA
        {
            addNoSongs();
        }

        musicCursor.close();

        if(songsList.size() == 0)
        {
            addNoSongs();
        }

        Collections.sort(songsList, new Comparator<Song>()
        {
            @Override
            public int compare(Song song, Song song2)
            {
                int compare = song.getTitle().compareTo(song2.getTitle());
                return ((compare == 0) ? song.getArtist().compareTo(
                        song2.getArtist()) : compare);
            }
        });

        return songsList;
    }
android mediastore
4个回答
8
投票

您需要修改audioCursor,例如


0
投票

首先,您需要通过MediaScanner将歌曲的数据添加到系统的媒体存储中。


-1
投票

将您的filePath变量更改为此:


-1
投票
public ArrayList<File> findSong(File root) {

        ArrayList<File> al = new ArrayList<File>();
        File[] files = root.listFiles();    // All file and folder automatic collect

        for (File singleFile : files) {
            if (singleFile.isDirectory() && !singleFile.isHidden()) {
                al.addAll(findSong(singleFile)); //Recursively call
            } else {
                if (singleFile.getName().endsWith(".mp3")) {
                    al.add(singleFile);
                }
            }
        }
        return al;
    }
© www.soinside.com 2019 - 2024. All rights reserved.