我遇到了将音乐集成到我的 Android 应用程序中的障碍。目标只是让用户通过 Google Play Music(或任何其他播放器,如 Winamp、Poweramp、doubleTwist 等)查看和播放他们已经可以访问的歌曲。
到目前为止,我已经尝试了几种方法,但每种方法都有问题。
方法 #1:使用 ContentResolver 查询从 Google Play 音乐中获取播放列表和歌曲,然后使用 MediaPlayer 播放
首先,在播放列表上找到光标:
String[] proj = { MediaStore.Audio.Playlists.NAME,
MediaStore.Audio.Playlists._ID };
Uri playlistUri = Uri.parse("content://com.google.android.music.MusicContent/playlists");
Cursor playlistCursor = getContentResolver().query(playlistUri, proj, null, null, null);
然后迭代获取每个播放列表中的歌曲,并像这样读取它们:
String[] proj2 = { MediaStore.Audio.Playlists.Members.TITLE,
MediaStore.Audio.Playlists.Members._ID };
String playListRef = "content://com.google.android.music.MusicContent/playlists/" + playListId + "/members";
Uri songUri = Uri.parse(playListRef);
Cursor songCursor = getContentResolver().query(songUri, proj2, null, null, null);
这可以获取播放列表和歌曲,但是您实际上无法播放它们(即使您告诉 Google Play 音乐“保留在设备上”)。具体来说,以下代码不会播放如上找到的给定歌曲:
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
mediaPlayer.setDataSource(dataPath);
mediaPlayer.prepare();
mediaPlayer.start();
} catch (Exception e) {}
事实上,我已经扫描了设备,但无法在任何地方找到文件(即使我已经通过完全禁用网络确认它们是本地的——在 Galaxy Nexus 和 Galaxy S3 上)。
方法 2:使用 Intent 调用 Google Play Music 或其他播放器
根据这篇文章,您可以简单地使用 Intents 调用播放器,如下所示:
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File(YOUR_SONG_URI);
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(intent);
但我认为这种方法不允许进行任何类型的控制——例如,传递要播放的特定歌曲,或者在歌曲播放完毕时收到通知。此外,@CommonWares 指出音乐应用程序及其 Intent 不是 Android SDK 的公共 API 的一部分,可能会在没有警告的情况下更改。
由于与 iTunes 的紧密集成,我试图实现的基本功能存在于 iOS 中。我认为谷歌会希望实现同样的整合,因为这可能意味着在 Play 商店中销售更多的音乐。
总结:是否可以让用户在 Android 上查看和播放他们已经可以访问的歌曲?使用 Google Play 音乐或任何其他应用程序执行此操作的最佳方式是什么?谢谢。