我正在寻找一种从我自己的服务中控制默认Android媒体播放器的方法。我不对从我的服务或活动中播放媒体感兴趣;我想控制现有的应用程序,该应用程序由位于MediaPlaybackActivity.java
的活动(MediaPlaybackService.java
)和更重要的服务(packages/apps/Music/src/com/android/music/
)组成。理想情况下,我想要一个独立于Android版本的解决方案。
我已经想出如何使用Intents进行暂停/播放/停止/下一个/上一个操作。我可以使用广播接收器拦截跟踪改变事件。我还可以获得播放列表列表和每个播放列表的内容。 我希望能够做的是指示MediaPlaybackService
播放特定的文件/歌曲。再次,我不想在我的应用程序中播放这首歌;我希望Android默认媒体播放器能够播放它。
到目前为止,我尝试了两种方法:
我将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版本中,此服务可能会再次发生变化。
通过ACTION_VIEW意图启动媒体播放器。这也有效;然而,正如预期的那样,媒体播放器UI被带到了前面,这并不理想。
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(someUri,“audio / mp3”); startActivity(意向);
还有其他方法可以实现吗?是否有错过的意图会指示媒体播放器播放特定的歌曲?或者,是否可以在后台开始活动,或者开始活动并立即切换回上一个活动?
答案 0 :(得分:4)
抱歉,没有受支持的方式来执行此操作。您所描述的所有内容都使用私有实现细节,正如您所看到的那样,并不健全。如果你想播放音乐,你应该在自己的应用程序中进行。
答案 1 :(得分:1)
我正在寻找一种从我自己的服务中控制默认Android媒体播放器的方法。
没有“默认的Android媒体播放器”。您指的应用程序可能存在于某些设备上,而在其他设备上则不存在。 AFAICT,很少有设备可以提供您认为的“默认Android媒体播放器” - 那些尚未运行设备制造商专有媒体播放器的设备可能拥有新的专有Google音乐应用。