在Android中设置活动的A2DP设备

时间:2018-08-05 02:21:43

标签: android audio bluetooth a2dp

我一直在编写代码,以将短的音频消息发送到廉价的蓝牙听筒。

我希望能够使用A2DP选择当前的音频输出设备,而且似乎没有任何可靠的方法。

我知道如何获取A2DP配置文件,以及如何使用反射来连接和断开设备。

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
public BluetoothA2dp mA2DP;

mBluetoothAdapter.getProfileProxy(this, mProfileListener, BluetoothProfile.A2DP);

private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
        public void onServiceConnected(int profile, BluetoothProfile proxy) {
            if (profile == BluetoothProfile.A2DP) {
                mA2DP = (BluetoothA2dp) proxy;
            }
        }

        @Override
        public void onServiceDisconnected(int profile) {
            if (profile==BluetoothProfile.A2DP) {
                mA2DP = null;
            }
        }
    };

通过A2DP配置文件,您可以使用反射来访问连接和断开连接方法:

public void disconnectA2DP(BluetoothDevice bd) {
    if (mA2DP==null) return;
    try {
        Method m = BluetoothA2dp.class.getDeclaredMethod("disconnect", BluetoothDevice.class); 
        m.invoke(mA2DP,bd);
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}

(连接与方法名称的使用“连接”相同,但相同)

一切正常。然后,您可以使用GetConnectedDevices来查找当前已连接的设备。

较旧的电话似乎仅支持一个设备,因此此机制可以很好地切换输出。但是,以后的手机(特别是三星)似乎同时支持两个设备。似乎没有任何方法选择音频要去的设备。我可以断开不需要的设备,但是有些设备有一个烦人的习惯,即无需询问即可重新连接,并使其成为活动输出。

BluetoothA2dp的源代码中,您可以清楚地看到“ setActiveDevice”,但即使通过反射,应用程序似乎也无法访问它。

任何帮助表示赞赏。

编辑:部分混乱的解决方案:根据经验,设备列表中的最后一个BluetoothDevice是活动的。如果不是我想要的那一个,我断开列表中的第一个,然后连接我想要的那一个。这似乎可行,但并没有使我成为最佳解决方案。

0 个答案:

没有答案