2011-05-26 137 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