2011-05-26 140 views
2

我正在尋找一種方法來從我自己的服務中控制默認的Android媒體播放器。我是感興趣的是從我的服務或活動中播放媒體;我想要控制現有的應用程序,該應用程序由位於packages/apps/Music/src/com/android/music/的活動(MediaPlaybackActivity.java)和更重要的服務(MediaPlaybackService.java)組成。理想情況下,我想要一個獨立於Android版本的解決方案。控制Android媒體播放器

我已經想出瞭如何使用Intents來執行暫停/播放/停止/下一個/前一個操作。我可以使用廣播接收器攔截音軌變化事件。我還可以獲得播放列表和每個播放列表的內容列表。 我希望能夠做的是指示MediaPlaybackService播放特定的文件/歌曲。再一次,我不想在我的應用程序中播放這首歌曲;我想讓Android默認媒體播放器播放它。

我已經嘗試了兩種方法至今:

  1. 我從進口的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版本中再次發生變化。

  2. 通過ACTION_VIEW意圖啓動媒體播放器。這也適用;然而,正如預期的那樣,媒體播放器UI被帶到了前臺,這並不理想。

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(someUri, "audio/mp3"); startActivity(intent);

是否有任何其他的方式來做到這一點?有沒有我錯過的指示媒體播放器播放特定歌曲的意圖?或者,您是否可以在後臺開始活動,或開始活動並立即切換回前一個活動?

+0

嘿,我正在考慮實施類似的東西。你說過,「我已經想出瞭如何使用Intents來暫停/播放/停止/下一個/以前的操作。」你能告訴我如何做到這一點?非常感謝,謝謝。 – JDS 2011-06-15 00:04:12

+1

@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

+0

@ianlh可悲的是你的評論中的鏈接不再有效(我知道它直接與問題無關) – Skuld 2012-08-10 05:19:00

回答

4

對不起,沒有支持的方式來做到這一點。你所描述的所有東西都使用私有實現細節,正如你所看到的那樣不健壯。如果你想播放音樂,你應該在自己的應用程序中完成。

1

I'm looking for a way to control the default Android media player from my own service.

沒有「默認Android媒體播放器」。您所指的應用程序可能存在於某些設備上,並且不會存在於其他設備上。 AFAICT,很少有設備會擁有您認爲是未來的「默認Android媒體播放器」 - 那些尚未運行設備製造商專有媒體播放器的設備可能會擁有新的專有Google音樂應用程序。

+0

好點。爲了澄清,我的意思是「默認Android媒體播放器」是「音樂」應用程序。操縱這個播放器只是一個更大的應用程序的一個非常小的功能。如果他們運行的設備沒有這個應用程序,或者如果用戶選擇不使用它,那很好。它主要只是一項增值功能。 – ianlh 2011-05-27 16:25:32