Я проходил здесь несколько потоков и не нашел ответа на вопрос, с которым сталкиваюсь.
Моя настройка: у меня есть компьютер Mac, который я использую в качестве виртуального последовательного порта.порт для связи с моим телефоном Android Nexus S.Запустив приложение чата bluetooth на телефоне и используя его в качестве клиента для связи с виртуальной связью, которую я настроил.
Изначально я попробовал приложение для чата bluetooth с двумя телефонами Android, чтобы убедиться, что оно работает, что и делает.Я могу отправлять тексты туда и обратно.
Мой вариант использования: у меня есть устройство, которое считывает метки RFid и отправляет данные на телефон Android для сбора информации.
Я использую свой компьютерпредставлять мое устройство на данный момент.
++++++++++++++++++ Хорошо, проблема
Я пытаюсь подключиться к ПК с моего телефона, и сначала я получаюОбновление строки состояния «Соединение ....» и после примерно 15 секунд я получаю тостовое сообщение «Я подключен к ПК», но сразу после того, как я получаю тост «Устройство потеряло соединение».Затем строка состояния переходит в состояние «не подключено»
Когда я перехожу через отладчик, кажется, что он не работает в следующей части приложения чата Bluetooth.В частности, эта строка (bytes = mmInStream.read(buffer);
)
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}
Когда я смотрю в logcat, для ввода-вывода исключение "software caused connection abort
" для read () на inputtream.
Вопросы:Это связано с тем, что мой виртуальный порт не настроен правильно?У меня есть терминал и я жду получения ввода в /dev/tty.Nexus .... с помощью экранной команды @ 9600 бод
В противном случае, я подумал, что, возможно, сокет, к которому подключается входной поток, недоступен.Я напечатал это, чтобы войти, и кажется, что это не было НЕДЕЙСТВИТЕЛЬНО.Каждый раз, когда я прохожу, он умирает в ConnectThread , а не в ConnectedThread .
Следующая часть кода: конкретно эта строка (mmSocket.connect();
)
public void run() {
Log.i(TAG, "BEGIN mConnectThread");
setName("ConnectThread");
// Always cancel discovery because it will slow down a connection
mAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
connectionFailed();
// Close the socket
try {
mmSocket.close();
} catch (IOException e2) {
Log.e(TAG, "unable to close() socket during connection failure", e2);
}
// Start the service over to restart listening mode
BluetoothChatService.this.start();
return;
}
// Reset the ConnectThread because we're done
synchronized (BluetoothChatService.this) {
mConnectThread = null;
}
// Start the connected thread
connected(mmSocket, mmDevice);
}
Интересно, теряет ли переменная сокета область видимости из-за многопоточности и передается ли сокет?
Спасибо