Android BluetoothSocket.connent с таймаутом - PullRequest
3 голосов
/ 14 декабря 2011

У меня возникла редкая ситуация, когда я пытаюсь подключить BluetoothSocket к серверу, а метод подключения просто не возвращается.Вот мой код:

            device = _adapter.getRemoteDevice(_address);
            socket = device.createInsecureRfcommSocketToServiceRecord(_uuid);                           
            _adapter.cancelDiscovery();
            socket.connect();

Это выполняется в AsyncTask, и задача никогда не завершается, так как подключение заблокировано навсегда ... это также предотвращает повторное подключение к серверу (я еще не выяснил,не может использовать BT полностью или просто не может восстановить соединение, используя тот же целевой адрес и UUID).Есть ли способ сделать соединение с таймаутом?

1 Ответ

2 голосов
/ 14 декабря 2011

Один из способов решения вашей проблемы - заставить другой поток прервать AsyncTask, вызвав cancel (true) (который прервет поток AsyncTask) или вызвав close () на Socket. Это может быть сделано, например, основным потоком путем отправки отложенного обратного вызова в его обработчик непосредственно перед socket.connect (), который будет удален сразу после.

Так в вашем случае

post timeout callback to handler, with reference to socket or to this (AsyncTask)
try {
    socket.connect();
} catch (IOException e) { // and/or InterruptedException
    couldn't connect
} finally {
    remove callback (this must be done here as the IO exception might be caused by something other than the timeout callback)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...