我试图弄清楚在 Froyo 中处理 Intent.ACTION_MEDIA_BUTTON 的正确(新)方法是什么。在 2.2 之前的日子里,我们必须注册一个 BroadcastReceiver(永久或在运行时),只要没有其他应用程序拦截它们并中止广播,媒体按钮事件就会到达。
Froyo 似乎仍然在一定程度上支持该模型(至少对于有线耳机而言),但它还引入了 registerMediaButtonEventReceiver 和 unregisterMediaButtonEventReceiver 方法,这些方法似乎可以控制应用程序之间的“传输焦点”。
在我的实验中,使用 registerMediaButtonEventReceiver 确实会导致蓝牙和有线耳机按钮按下都被路由到应用程序的广播接收器(应用程序获得“传输焦点”),但它看起来像音频路由的任何变化(例如拔下耳机)将焦点拉回默认媒体播放器。
Android 2.2 的实现背后的逻辑是什么?处理运输控制的正确方法是什么?我们是否必须检测音频路由的变化并尝试重新获得焦点?
这是 Android 平台上任何 3rd 方媒体播放器都必须处理的问题,因此我希望有人(可能是 Google 工程师)可以提供一些我们都可以遵循的指导方针。采用标准方法可能会使最终用户更容易预测耳机按钮控制。
斯特凡