【发布时间】:2011-09-03 00:28:57
【问题描述】:
我正在寻找一种方法来从我自己的服务中控制默认的 Android 媒体播放器。我不有兴趣播放我的服务或活动中的媒体;我想控制现有的应用程序,它由一个活动 (MediaPlaybackActivity.java) 和更重要的是位于 packages/apps/Music/src/com/android/music/ 的服务 (MediaPlaybackService.java) 组成。理想情况下,我想要一个独立于 Android 版本的解决方案。
我已经弄清楚如何使用 Intents 进行暂停/播放/停止/下一个/上一个操作。我可以使用广播接收器拦截轨道更改事件。我还可以获得播放列表和每个播放列表的内容。 我想做的是指示MediaPlaybackService 播放特定的文件/歌曲。 同样,我不想在我的应用程序中播放这首歌;我希望 Android 默认媒体播放器播放它。
到目前为止,我已经尝试了两种方法:
我将 IMediaPlaybackService.aidl 文件从
packages/apps/Music/src/com/android/music导入到我自己的应用程序中,并使用它来绑定到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 Intent 启动媒体播放器。这也有效;但是,正如预期的那样,媒体播放器的 UI 被带到了最前面,这并不理想。
意图意图 = new Intent(android.content.Intent.ACTION_VIEW); intent.setDataAndType(someUri, "audio/mp3"); 开始活动(意图);
还有其他方法可以做到这一点吗?我是否错过了指示媒体播放器播放特定歌曲的意图?或者,是否可以在后台启动一个活动,或者启动一个活动并立即切换回上一个活动?
【问题讨论】:
-
嘿,我正在研究实现类似的东西。你说,“我已经弄清楚如何使用 Intents 进行暂停/播放/停止/下一个/上一个操作。”你能告诉我怎么做吗?非常感谢,谢谢。
-
@YoungMoney 要点是(您可以将 togglepause 替换为下一个、上一个、暂停或停止): Intent i = new Intent("com.android.music.musicservicecommand"); i.putExtra("command", "togglepause");发送广播(i);您可以随时查看MediaPlaybackService.java 了解更多详情。希望对您有所帮助。
-
@ianlh 遗憾的是,您评论中的链接不再有效(我知道它与问题没有直接关系)