如何访问Android默认音乐应用程序创建的播放列表并调用音乐应用程序播放?

Wes*_*ley 14 media android playlist

我正在写一个Android应用程序,我想访问Android默认音乐应用程序创建的播放列表.

在我的应用中,用户应该能够浏览播放列表并选择要播放的任何播放列表.

所以基本上我想知道如何访问它,当用户选择任何播放列表时,如何将其传递给默认音乐应用程序以在后台播放.

它与ContentProvider或mediastore有关吗?我真的不知道如何访问其他应用程序上的数据.

非常感谢!

Ank*_*kur 10

要播放上面播放列表中的歌曲,我调用该功能

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

从上面的onCreate方法.剩下的代码如下所述.

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();
    }
 }
Run Code Online (Sandbox Code Playgroud)

希望这会奏效.:)


Tom*_*ert 8

此活动结合了Ankur Pandya的两个答案,列出设备上的播放列表,然后播放第一个播放列表中的第一首曲目.

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ank*_*kur 6

要显示用户在Android中的默认音乐应用程序中创建的所有播放列表,我在我的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();

}
Run Code Online (Sandbox Code Playgroud)

在使用之前不要忘记包含这些

import android.net.Uri;
import android.provider.MediaStore;
import android.database.Cursor;
Run Code Online (Sandbox Code Playgroud)

这段代码经过测试,可以在target = android-8上正常运行