Буду очень признателен, если кто-нибудь сможет мне помочь.Я пытаюсь подключиться к некоторому пользовательскому оборудованию Bluetooth, которое мне предоставил клиент.Я неукоснительно следовал документации API и использую следующий код (в основном, скопированный и сшитый из официальных документов), чтобы установить сокетное соединение с оборудованием Bluetooth, которое пользователь выбирает в качестве устройства из списка в моем приложении Android.
private class CommunicationThread extends Thread {
private final BluetoothSocket mmSocket;
public CommunicationThread(BluetoothDevice device) {
super();
// use a temporary object that is later assigned to mmSocket,
// because mmSocket is final
BluetoothSocket tmp = null;
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// get a BluetoothSocket to connect with the given BluetoothDevice
try {
// create rf communication socket using a unique identifier for this app
tmp = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
} catch (Exception e) {
Log.d("An exception occurred during bluetooth rf communication server socket creation","NDB",e);
}
mmSocket = tmp;
// cancel discovery because it will slow down the connection
mBluetoothAdapter.cancelDiscovery();
}
public void run() {
try {
// connect the device through the socket. This will block
// until it succeeds or throws an exception
mmSocket.connect();
} catch (IOException e) {
Log.d("An exception occurred during bluetooth socket connection","NDB",e);
// unable to connect; close the socket and get out
try {
mmSocket.close();
} catch (IOException closeExc) {
Log.d("An exception occurred while attempting to close bluetooth socket","NDB",closeExc);
}
return;
}
// do work to manage the connection
manageConnectedSocket();
}
private void manageConnectedSocket() {
InputStream tmpIn = null;
// get the input steram, use temp object because
// member stream is final
try {
tmpIn = mmSocket.getInputStream();
} catch (IOException e) {
Log.d("An exception occurred during bluetooth io stream creation","NDB",e);
}
final InputStream mmInStream = tmpIn;
byte[] buffer = new byte[1024]; // buffer store for the stream
int bytes; // bytes returned from read()
// keep listening to the InputStream until an exception occurs
while (true) {
try {
// read from the InputStream
bytes = mmInStream.read(buffer);
// send the obtained bytes to the message handler
bluetoothHandler.obtainMessage(/*MESSAGE_READ*/1, bytes, -1, buffer).sendToTarget();
} catch (IOException e) {
break;
}
}
}
/** Cancels an in-progress connection, and closes the socket */
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) { }
}
}
Проблема заключается в том, что при попытке подключиться к оборудованию в течение run()
с использованием mmSocket.connect()
блоки вызовов на несколько секунд выдают исключение с описанием java.io.IOException: Connection reset by peer
.Я вставил соответствующий вывод LogCat ниже, с окружающими линиями для вашего рассмотрения.
05-07 13:29:08.675: INFO/ActivityThread(1370): Receiving broadcast android.bleutooth.device.action.UUID seq=-1 to android.app.ActivityThread$PackageInfo$ReceiverDispatcher@2fd75738
05-07 13:29:08.675: ERROR/ActivityThread(1370): start dispatch OnReceive message,mRegistered=true mCurOrdered=false intent=Intent { act=android.bleutooth.device.action.UUID (has extras) } receiver = com.android.settings.bluetooth.BluetoothEventRedirector$1@2fd74d98
05-07 13:29:08.675: VERBOSE/BluetoothEventRedirector(1370): Received android.bleutooth.device.action.UUID
05-07 13:29:08.675: ERROR/xubo(1370): mBroadcastReceiver receive msg = android.bleutooth.device.action.UUID
05-07 13:29:08.685: ERROR/ActivityThread(1370): exit dispatch OnReceive message,mRegistered=true mCurOrdered=false
05-07 13:29:15.455: DEBUG/An exception occurred during bluetooth socket connection(9827): NDB
05-07 13:29:15.455: DEBUG/An exception occurred during bluetooth socket connection(9827): java.io.IOException: Connection reset by peer
05-07 13:29:15.455: DEBUG/An exception occurred during bluetooth socket connection(9827): at android.bluetooth.BluetoothSocket.connectNative(Native Method)
05-07 13:29:15.455: DEBUG/An exception occurred during bluetooth socket connection(9827): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)
05-07 13:29:15.455: DEBUG/An exception occurred during bluetooth socket connection(9827): at com.ndb.proj.Communicator$CommunicationThread.run(Communicator.java:157)
05-07 13:29:18.595: DEBUG/bluez/src/device.c(8031): /org/bluez/8031/hci0/dev_00_06_66_05_70_E7: canceling authentication request
05-07 13:29:18.595: ERROR/BluetoothEventLoop.cpp(1204): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/8031/hci0/dev_00_06_66_05_70_E7
05-07 13:29:18.595: DEBUG/BluetoothEventLoop(1204): Device property changed:00:06:66:05:70:E7property:Connected
05-07 13:29:18.605: INFO/ActivityThread(1204): Receiving broadcast android.bluetooth.device.action.ACL_DISCONNECTED seq=-1 to android.app.ActivityThread$PackageInfo$ReceiverDispatcher@2fe7b918
05-07 13:29:18.605: ERROR/ActivityThread(1204): start dispatch OnReceive message,mRegistered=true mCurOrdered=false intent=Intent { act=android.bluetooth.device.action.ACL_DISCONNECTED (has extras) } receiver = android.server.BluetoothA2dpService$1@2fdafb58
05-07 13:29:18.615: ERROR/ActivityThread(1204): exit dispatch OnReceive message,mRegistered=true mCurOrdered=false
05-07 13:29:18.615: INFO/ActivityThread(1370): Receiving broadcast android.bluetooth.device.action.PAIRING_CANCEL seq=-1 to android.app.ActivityThread$PackageInfo$ReceiverDispatcher@2fd75738
05-07 13:29:18.625: ERROR/ActivityThread(1370): start dispatch OnReceive message,mRegistered=true mCurOrdered=false intent=Intent { act=android.bluetooth.device.action.PAIRING_CANCEL } receiver = com.android.settings.bluetooth.BluetoothEventRedirector$1@2fd74d98
05-07 13:29:18.625: VERBOSE/BluetoothEventRedirector(1370): Received android.bluetooth.device.action.PAIRING_CANCEL
05-07 13:29:18.625: ERROR/xubo(1370): mBroadcastReceiver receive msg = android.bluetooth.device.action.PAIRING_CANCEL
05-07 13:29:18.625: ERROR/ActivityThread(1370): exit dispatch OnReceive message,mRegistered=true mCurOrdered=false
Клиент сообщил, что «код сопряжения» - 1234. Однако мой телефон Android прекрасно работает с устройством безуточняя это.Я подтвердил это, введя настройки Bluetooth, и действительно устройство сообщается как спаренное.
Кто-нибудь может подсказать, что идет не так?