Я использую код из примера Google Bluetooth Chat для настройки сервера прослушивания Bluetooth.Я хочу, чтобы приложение всегда слушало входящее соединение.Когда приложение увидит запрос на подключение, оно примет подключение, прочитает строку, которую отправит удаленное устройство, а затем ответит, отправив файл.
Проблема заключается в том, что приложение никогда не принимает подключение.Он блокируется на socket = mmServerSocket.accept();
и никогда не движется дальше.См. Код ниже после строки if(D) System.out.println("Waiting to connect************");
. Чтобы проверить это, я запускаю операцию, которая запускает поток, а затем пытаюсь подключиться к ноутбуку и отправить файл.Когда я делаю это, общий Android-менеджер Bluetooth видит файл и загружает его, фактически минуя мое Android-устройство.Это единственный способ проверить это?Я не могу понять, если это проблема тестирования или кодирования.
private class AcceptThread extends Thread {
// The local server socket
private final BluetoothServerSocket mmServerSocket;
public AcceptThread() {
BluetoothServerSocket tmp = null;
// Create a new listening server socket
try {
tmp = mAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
} catch (IOException e) {
Log.e(TAG, "listen() failed", e);
}
mmServerSocket = tmp;
}
public void run() {
if (D) Log.d(TAG, "BEGIN mAcceptThread" + this);
setName("AcceptThread");
BluetoothSocket socket = null;
// Listen to the server socket if we're not connected
while (mState != STATE_CONNECTED) {
try {
// This is a blocking call and will only return on a
// successful connection or an exception
if(D) System.out.println("Waiting to connect************");
socket = mmServerSocket.accept();
if(D) System.out.println("We have accepted connection and are connected***************");
} catch (IOException e) {
Log.e(TAG, "accept() failed", e);
break;
}
// If a connection was accepted
if (socket != null) {
synchronized (BluetoothServer.this) {
switch (mState) {
case STATE_LISTEN:
case STATE_CONNECTING:
// Situation normal. Start the connected thread.
connected(socket, socket.getRemoteDevice());
break;
case STATE_NONE:
case STATE_CONNECTED:
// Either not ready or already connected. Terminate new socket.
try {
socket.close();
} catch (IOException e) {
Log.e(TAG, "Could not close unwanted socket", e);
}
break;
}
}
}
}
if (D) Log.i(TAG, "END mAcceptThread");
}