我正在寻找一种方法来从我自己的服务中控制默认的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