我遇到了將音樂集成到我的Android應用程序中的障礙。我們的目標只是讓用戶通過Google Play音樂(或任何其他播放器,如Winamp,Poweramp,doubleTwist等)看到&已播放的歌曲。如何讓用戶在Android上查看和播放他們已有權訪問的歌曲(例如,通過Google Play)?
到目前爲止,我已經嘗試了幾個方法,但每個人都有問題。
方法1:使用ContentResolver的查詢以獲得來自谷歌播放&歌曲播放音樂,然後播放使用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);
這窩ks來獲取播放列表和歌曲,但是實際上你不能播放它們(即使你告訴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:調用谷歌播放音樂,或其他播放器,使用使用意圖的意圖
據this post,你可以簡單地調用播放器,像這樣:
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指出,音樂應用程序及其內容不屬於Android SDK公共API的一部分,可能會在沒有警告的情況下更改。
我想要實現的基本功能存在於iOS的,這要歸功於與iTunes緊密集成。我認爲谷歌希望實現同樣的整合,因爲它可能意味着在Play商店銷售更多音樂。
總結:是否有可能讓用戶看到&播放歌曲到他們已經在Android的訪問?使用Google Play音樂或任何其他應用程序執行此操作的最佳方法是什麼?謝謝。
更新:直到我找到一個很好的答案與谷歌整合播放音樂或其他音樂播放器,我剛剛研製讀取和播放設備上本地存儲的音樂文件的接口(使用ContentResolver的查詢找到歌曲和MediaPlayer播放它們)。這似乎工作正常,但它留給用戶將MP3和其他音樂文件移動到設備上。我仍然希望找到一種解決方案,通過提供與流行音樂播放器的良好集成,讓所有人都變得輕鬆....任何人? – gcl1
我認爲你的方法#1應該工作,如果你獲得對應於所選曲目的流式傳輸網址並將其傳遞給MediaPlayer。 –
當我最後一次在12月嘗試時,我無法做出第一種方法。但是我會很感興趣知道你是否真的做到了。與此同時,正如我在UPDATE評論中所說的,我只是讓用戶播放本地存儲在設備上的音樂。謝謝。 – gcl1