控制Android媒体播放器

我正在寻找一种方法来控制我自己的服务默认的Android媒体播放器。 我对从我的服务或活动中播放媒体感兴趣; 我想控制现有的应用程序,它包含一个活动( MediaPlaybackActivity.java ),更重要的是一个位于packages/apps/Music/src/com/android/music/的服务( MediaPlaybackService.java )。 理想情况下,我想要一个独立于Android版本的解决方案。

我已经弄清楚如何使用Intents进行暂停/播放/停止/下一个/上一个操作。 我可以使用广播接收器拦截跟踪改变事件。 我还可以获得播放列表列表和每个播放列表的内容。 我希望能够做的是指示MediaPlaybackService播放特定的文件/歌曲。 再一次,我不想在我的应用程序中播放这首歌; 我希望Android默认媒体播放器能够播放它。

到目前为止,我尝试了两种方法:

  1. 我将packages/apps/Music/src/com/android/music的IMediaPlaybackService.aidl文件导入到我自己的应用程序中,并使用它绑定到MediaPlaybackService 。 在Froyo,这很好用; 我可以传递路径到openFile方法,服务将播放该文件。 但是,在Gingerbread上,我收到一个错误: Permission Denial: Accessing service ComponentInfo{com.google.android.music/com.android.music.MediaPlaybackService} from pid=17721, uid=10058 requires null 。 找到这个错误的解决方法将是一个很好的临时解决方案,但它不是面向未来的。 在未来的Android版本中,此服务可能会再次发生变化。

  2. 通过ACTION_VIEW Intent启动媒体播放器。 这也有效; 然而,正如预期的那样,媒体播放器UI被带到了前面,这并不理想。

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(someUri,“audio / mp3”); startActivity(意向);

有没有其他方法可以实现这一目标? 是否有一个我错过的意图会指示媒体播放器播放特定的歌曲? 或者,是否可以在后台开始活动,或者开始活动并立即切换回上一个活动?

抱歉,没有支持的方法来执行此操作。 您所描述的所有内容都使用私有实现细节,正如您所看到的那样不健全。 如果你想播放音乐,你应该在自己的应用程序中进行。

我正在寻找一种方法来控制我自己的服务默认的Android媒体播放器。

没有“默认的Android媒体播放器”。 您指的应用程序可能存在于某些设备上,而在其他设备上则不存在。 AFAICT,很少有设备会有你认为的“默认Android媒体播放器” – 那些尚未运行设备制造商专有媒体播放器的设备可能拥有新的专有Google音乐应用。