Хорошо, так как это сводило меня с ума, я немного покопался в исходном коде и нашел 100% надежное (по крайней мере, на моем Nexus 4, Android 4.3) решение для подключения к сопряженному устройству A2DP (например,в качестве гарнитуры или аудиоустройства Bluetooth).Я опубликовал полностью рабочий пример проекта (его легко собрать с помощью Android Studio), который вы можете найти здесь, на Github .
По сути, вам нужно сделать следующее::
- Получить экземпляр
BluetoothAdapter
- Используя этот экземпляр, получить профиль прокси для A2DP:
adapter.getProfileProxy (context, listener, BluetoothProfile.A2DP);
, где listener
- это ServiceListener
, который получит BluetoothProfile
в своем onServiceConnected()
обратном вызове (который может быть приведен к экземпляру BluetoothA2dp
)
- Используйте отражение, чтобы получить
connect(BluetoothDevice)
метод на прокси:
Method connect = BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);
String deviceName = "My_Device_Name";
BluetoothDevice result = null;
Set<BluetoothDevice> devices = adapter.getBondedDevices();
if (devices != null) {
for (BluetoothDevice device : devices) {
if (deviceName.equals(device.getName())) {
result = device;
break;
}
}
}
- И вызовите метод
connect()
:
connect.invoke(proxy, result);
, который, по крайней мере для меня, вызвал немедленное подключение устройства.