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

Ale*_*ion 2 android mediastore

我想从设备上的一个特定路径获取所有歌曲.在一个例子中,我想从路径中获取一个特定文件夹"music"中的所有歌曲:"/ mnt/sdcard/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;
    }
Run Code Online (Sandbox Code Playgroud)

kam*_*mil 7

你需要修改你的musicCursor喜欢

musicCursor = musicResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,MediaStore.Audio.Media.DATA + " like ? ",
            new String[] {"%YOUR_SPECIFIC_FOLDER_NAME%"},  null);
Run Code Online (Sandbox Code Playgroud)

希望它能帮到你......

谢谢