Я передаю HeadphoneConnectThread
устройство Bluetooth, например SONY WH-1000XM3, которое я получаю от: Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
.
Класс HeadphoneConnectThread пытается установить соединение с наушниками Bluetooth.
Соединительная часть работает нормально, т. е. сопряженные наушники подключены, и на них можно передавать данные.
Чтобы отключиться, я вызываю close()
, который обновляет состояние BluetoothSocket
(см. ниже), однако наушники не отключаются.
socket.isConnected()=false, headphone.getBondState()=12
Состояние связи 12:
https://developer.android.com/reference/android/bluetooth/BluetoothDevice#BOND_BONDED
public class HeadphoneConnectThread extends Thread {
public static final UUID uuid = UUID.fromString("96cc203e-5068-46ad-b32d-e316f5e069ba");
private final BluetoothDevice headphone;
private BluetoothSocket socket;
public HeadphoneConnectThread(BluetoothDevice headphone) {
BluetoothSocket tmp = null;
this.headphone = headphone;
try {
tmp = headphone.createRfcommSocketToServiceRecord(uuid);
} catch (IOException e) {
Log.e(TAG, "Socket's create() method failed", e);
}
socket = tmp;
}
public void run() {
try {
Log.d(TAG, "Connecting to " + headphone.getName() + ", address=" + headphone.getAddress());
if (!socket.isConnected()) {
socket.connect();
Log.d(TAG, "Connected");
} else {
Log.d(TAG, "Headphone already connected");
}
Thread.sleep(3000);
if (socket.isConnected()) {
disconnectHeadphone();
}
} catch (IOException e) {
...
}
}
public void disconnectHeadphone() {
try {
Log.d(TAG,"Disconnecting " + headphone.getName() + ", address=" + headphone.getAddress());
socket.getOutputStream().close();
socket.getInputStream().close();
socket.close();
Log.d(TAG, "Disconnected, socket.isConnected()=" + socket.isConnected() +
", headphone.getBondState()=" + headphone.getBondState());
socket = null;
} catch (IOException e) {
Log.e(TAG, "Error occurred while disconnecting", e);
}
}