我的应用程序需要知道用户选择的基本音频路由的能力。在 iOS 上,这很简单,因为您只需注册一个回调,就可以准确地知道音频的去向。
在 Android 上,我很高兴看到MediaRouter
课程,但令我沮丧的是,没有可预测的方法来确定路线类型。例如,切换到蓝牙A2DP设备时,唯一的识别项是RouteInfo.getName()
方法,但这会返回A2DP设备的友好名称,因此无法进行比较。
我也尝试过使用以下广播:
AudioManager.ACTION_AUDIO_BECOMING_NOISY
Intent.ACTION_HEADSET_PLUG
BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED
BluetoothA2dp.ACTION_PLAYING_STATE_CHANGED
BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED
但是这种方法容易出错。例如,如果你连接了蓝牙 A2DP,那么你插上耳机,很容易分辨出路线是“耳机”,但在拔下耳机时,你必须猜测哪条路线仍然处于活动状态,通过记录所有蓝牙事件的连接状态。
当您的应用程序启动时,确定初始音频路由也存在困难。HEADSET_PLUG 很粘,所以这很好,但没有其他...
关于如何解决这个问题并准确检测到这个问题有什么建议吗?为什么这在 Android 中是一项如此艰巨的任务?