我正在尋找一種方法來從我自己的服務中控制默認的Android媒體播放器。我是非感興趣的是從我的服務或活動中播放媒體;我想要控制現有的應用程序,該應用程序由位於packages/apps/Music/src/com/android/music/
的活動(MediaPlaybackActivity.java
)和更重要的服務(MediaPlaybackService.java
)組成。理想情況下,我想要一個獨立於Android版本的解決方案。控制Android媒體播放器
我已經想出瞭如何使用Intents來執行暫停/播放/停止/下一個/前一個操作。我可以使用廣播接收器攔截音軌變化事件。我還可以獲得播放列表和每個播放列表的內容列表。 我希望能夠做的是指示MediaPlaybackService
播放特定的文件/歌曲。再一次,我不想在我的應用程序中播放這首歌曲;我想讓Android默認媒體播放器播放它。
我已經嘗試了兩種方法至今:
我從進口的
packages/apps/Music/src/com/android/music
文件IMediaPlaybackService.aidl到我自己的應用程序,並用它來綁定到MediaPlaybackService
。在Froyo上,這很有效。我可以將路徑傳遞給openFile方法,並且該服務將播放該文件。然而,在薑餅,我得到一個錯誤:Permission Denial: Accessing service ComponentInfo{com.google.android.music/com.android.music.MediaPlaybackService} from pid=17721, uid=10058 requires null
。找到這個錯誤的解決方法將是一個很好的臨時解決方案,但它不是面向未來的。此服務可能會在未來的Android版本中再次發生變化。通過ACTION_VIEW意圖啓動媒體播放器。這也適用;然而,正如預期的那樣,媒體播放器UI被帶到了前臺,這並不理想。
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(someUri, "audio/mp3"); startActivity(intent);
是否有任何其他的方式來做到這一點?有沒有我錯過的指示媒體播放器播放特定歌曲的意圖?或者,您是否可以在後臺開始活動,或開始活動並立即切換回前一個活動?
嘿,我正在考慮實施類似的東西。你說過,「我已經想出瞭如何使用Intents來暫停/播放/停止/下一個/以前的操作。」你能告訴我如何做到這一點?非常感謝,謝謝。 – JDS 2011-06-15 00:04:12
@YoungMoney它的要點是(你可以用下一個,上一個,暫停或停止替換togglepause):Intent i = new Intent(「com.android.music.musicservicecommand」); i.putExtra(「command」,「togglepause」); sendBroadcast(ⅰ);您可以隨時查看[MediaPlaybackService.java](http://www.google.com/codesearch#cZwlSNS7aEw/packages/apps/Music/src/com/android/music/MediaPlaybackService.java&q=MediaPlaybackService.java&type=cs ) 更多細節。希望有所幫助。 – ianlh 2011-06-16 17:56:36
@ianlh可悲的是你的評論中的鏈接不再有效(我知道它直接與問題無關) – Skuld 2012-08-10 05:19:00