我在写一个Android应用程序,想实现访问音乐播放列表的功能。
在程序中,用户应该可以浏览音乐播放列表,选择出他喜欢的歌曲。
现在想实现的是当用户选中播放列表中的歌曲后,系统怎么连接上这个歌曲,如何把这首歌添加到默认音乐应用程序中,并且作为背景播放。
使用ContentProvider 或mediastore也不知道怎么实现?不知道如何在其他应用程序中访问数据。
public MusicFile[] readAllMusic(Context context){
Cursor cursor = context.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.YEAR,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.DATA }, null, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
if(null==cursor){
return null;
}
MusicFile[] array=new MusicFile[cursor.getCount()];
int i=0;
while (cursor.moveToNext()) {
//MusicFile has tile,path....set specified value as follows
//title=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
//path=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
array[i]=new MusicFile(cursor);
i++;
}
return array;
}
public void play(MusicFile mf,Context context){
File file = new File(mf.absolutePath);
final Uri data = Uri.fromFile(file);
final Intent intent = new Intent(null, data);
intent.setDataAndType(data, "audio/*");
context.startActivity(intent);
}
想从播放列表里播放歌曲,调用这个函数:
PlaySongsFromAPlaylist( PlayListID ); // 0 < PlayListID < count
还有下面的每个函数:
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();
}
}