How can I access playlist created by android default music app and call the music app to play it?

后端 未结 3 1667
天涯浪人
天涯浪人 2020-12-25 08:28

I am writing an android app, and I want to access the playlist created by android default music app.

In my app, the user should be able to browse the playlist and se

相关标签:
3条回答
  • 2020-12-25 09:12

    This activity combines Ankur Pandya's two answers to list the playlists on the device and then play the first track from the first playlist.

    package com.withoutstones.pandyaplaylists;
    
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.media.MediaPlayer;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.util.Log;
    
    /**
     * @author Ankur Pandya
     * @author Tommy Herbert
     */
    public class PandyaPlaylistsActivity extends Activity {
    
        // constants
    
        private static final String LOGGING_TAG = "PandyaPlaylists";
    
        // static methods
    
        /**
         * Create a MediaPlayer and play the specified audio file. Note that a full app would usually
         * call stop() and release() on the player after use.
         * 
         * @param path
         *            to data file
         */
        public static void playAudio(final String path) {
            final MediaPlayer player = new MediaPlayer();
            if (path == null) {
                Log.e(LOGGING_TAG, "Called playAudio with null data stream.");
                return;
            }
            try {
                player.setDataSource(path);
                player.prepare();
                player.start();
            } catch (Exception e) {
                Log.e(LOGGING_TAG, "Failed to start MediaPlayer: " + e.getMessage());
                return;
            }
        }
    
        // superclass overrides
    
        @Override
        public void onCreate(final Bundle savedInstanceState) {
    
            // Create the superclass portion of the object.
            super.onCreate(savedInstanceState);
    
            // Set up the UI.
            this.setContentView(R.layout.main);
    
            // Get a cursor over all playlists.
                final ContentResolver resolver = this.getContentResolver();
            final Uri uri = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
            final String idKey = MediaStore.Audio.Playlists._ID;
            final String nameKey = MediaStore.Audio.Playlists.NAME;
            final String[] columns = { idKey, nameKey };
            final Cursor playLists = resolver.query(uri, columns, null, null, null);
            if (playLists == null) {
                Log.e(LOGGING_TAG, "Found no playlists.");
                return;
            }
    
            // Log a list of the playlists.
            Log.i(LOGGING_TAG, "Playlists:");
            String playListName = null;
            for (boolean hasItem = playLists.moveToFirst(); hasItem; hasItem = playLists.moveToNext()) {
                playListName = playLists.getString(playLists.getColumnIndex(nameKey));
                Log.i(LOGGING_TAG, playListName);
            }
    
            // Play the first song from the first playlist.
            playLists.moveToFirst();
            final long playlistID = playLists.getLong(playLists.getColumnIndex(idKey));
            this.playTrackFromPlaylist(playlistID);
    
            // Close the cursor.
            if (playLists != null) {
                playLists.close();
            }
        }
    
        // PandyaPlaylistsActivity instance methods
    
        /**
         * Play the first track on the specified playlist.
         * 
         * @param playListID
         *            from the MediaStore database
         */
        public void playTrackFromPlaylist(final long playListID) {
                final ContentResolver resolver = this.getContentResolver();
            final Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID);
            final String dataKey = MediaStore.Audio.Media.DATA;
            Cursor tracks = resolver.query(uri, new String[] { dataKey }, null, null, null);
            if (tracks != null) {
                tracks.moveToFirst();
                final int dataIndex = tracks.getColumnIndex(dataKey);
                final String dataPath = tracks.getString(dataIndex);
                PandyaPlaylistsActivity.playAudio(dataPath);
                tracks.close();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-25 09:14

    To play the songs from above playlists, I m calling the function

    PlaySongsFromAPlaylist( PlayListID ); // 0 < PlayListID < count

    from the above onCreate method. And remaining code is as per mentioned below.

    public void PlaySongsFromAPlaylist(int playListID){
    
        String[] ARG_STRING = {MediaStore.Audio.Media._ID,MediaStore.Audio.Media.DATA,MediaStore.Audio.Media.DISPLAY_NAME,MediaStore.Video.Media.SIZE,android.provider.MediaStore.MediaColumns.DATA};
        Uri membersUri = MediaStore.Audio.Playlists.Members.getContentUri("external", playListID);
        Cursor songsWithingAPlayList = mThis.managedQuery(membersUri, ARG_STRING, null, null, null);
        int theSongIDIwantToPlay = 0; // PLAYING FROM THE FIRST SONG
        if(songsWithingAPlayList != null)
        {
            songsWithingAPlayList.moveToPosition(theSongIDIwantToPlay);
            String DataStream = songsWithingAPlayList.getString(4);
            PlayMusic(DataStream);
            songsWithingAPlayList.close();
        }   
    }
    
     public static void PlayMusic(String DataStream){
        MediaPlayer mpObject = new MediaPlayer();
        if(DataStream == null)
            return;
        try {
            mpObject.setDataSource(DataStream);
            mpObject.prepare();
            mpObject.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
     }
    

    Hope this will work. :)

    0 讨论(0)
  • 2020-12-25 09:14

    To display all the playlist created by user in default music application in Android, I am using following block of code in my Activity:

    @Override
    public void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);         
        String[] proj = {"*"};
        Uri tempPlaylistURI = MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
    
        // In the next line 'this' points to current Activity.
        // If you want to use the same code in other java file then activity,
        // then use an instance of any activity in place of 'this'.
    
        Cursor playListCursor= this.managedQuery(tempPlaylistURI, proj, null,null,null);
    
        if(playListCursor == null){
            System.out.println("Not having any Playlist on phone --------------");
            return;//don't have list on phone
        }
    
        System.gc();
    
        String playListName = null;
    
        System.out.println(">>>>>>>  CREATING AND DISPLAYING LIST OF ALL CREATED PLAYLIST  <<<<<<");
    
        for(int i = 0; i <playListCursor.getCount() ; i++)
        {
            playListCursor.moveToPosition(i);
            playListName = playListCursor.getString(playListCursor.getColumnIndex("name"));
            System.out.println("> " + i + "  : " + playListName );
        }
    
        if(playListCursor != null)
            playListCursor.close();
    
    }
    

    Don't forget to include these before using

    import android.net.Uri;
    import android.provider.MediaStore;
    import android.database.Cursor;
    

    This code is Tested and working fine over target = android-8

    0 讨论(0)
提交回复
热议问题