Bluetooth -> обнаружение службы не удалось - PullRequest
13 голосов
/ 05 февраля 2010

Я пишу приложение, которое может общаться с моим ПК. Я использовал функции Bluetooth SDK 2.1.

Я могу найти устройства, получить их MAC-адрес, создать RFCOMM сокет, но когда я запускаю соединение, я получаю следующее сообщение об ошибке.

Сбой при обнаружении службы.

  1. Это из-за UUID , который не совпадает в моем приложении и на моем ПК?
  2. Как я могу получить правильный UUID на моем ПК?

Если я напишу такое приложение, мой Nexus One является клиентом или сервером?

Ответы [ 6 ]

7 голосов
/ 21 марта 2010

ОК, у меня та же проблема, но я думаю, что могу ответить на несколько ваших вопросов. Если ваш компьютер открыл SPP-порт, например, с помощью «sdptool add --channel = 3 SP», ваш телефон Android будет клиентом, открывающим сокет и соединяющимся с этим сокетом с сервером (вашим ПК или любым другим устройством Bluetooth, например, GPS, мышь и т. д.).

Вы можете получить эту информацию, прочитав статью Bluetooth , определение клиента я взял из этой статьи.

Если вы открываете SPP-порт на сервере (вашем ПК и т. Д.), Вы предлагаете стандартную услугу, и для этой услуги назначен специальный UUID. Это будет: 00001101-0000-1000-8000-00805F9B34FB, если я не ошибаюсь.

Так что я думаю, что мы должны получить квалифицированный ответ от разработчика Android. Или задайте этот вопрос в четверг в рабочее время IRC.

4 голосов
/ 06 марта 2012

Подсказка: если вы подключаетесь к последовательной плате Bluetooth, попробуйте использовать хорошо известный SPP UUID 00001101-0000-1000-8000-00805F9B34FB. Однако, если вы подключаетесь к одноранговому устройству Android, сгенерируйте свой уникальный UUID.

Ссылка

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

Я нашел способ убедиться, что UUID найден на устройстве. На стороне клиента, перед device.createRfcommSocketToServiceRecord(uuid); добавьте:

Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'");
process.waitFor();

Процесс заморожен на 20-30 секунд, поскольку Android загружает службы. Но после этого, если сервер находится в режиме обнаружения (если сервер является телефоном Android), соединение каждый раз будет успешным!

2 голосов
/ 17 мая 2010

Несмотря на то, что это может быть ваш UUID, я бы также посоветовал вам убедиться, что Bluetooth MAC точный и заглавный.

Я бы также предложил запустить hcidump -X в терминале на коробке Linux и посмотреть, видите ли вы двусторонний трафик между вашей машиной Linux и телефоном в течение всего процесса.

1 голос
/ 16 июня 2011

У меня была такая же проблема при переподключении SPP после первого подключения.

Это потому, что rfcomm channel=-1 в BluetoothService.java. Я добавил updateDeviceServiceChannelCache() в конец fetchRemoteUuids(), и тогда все заработало!

0 голосов
/ 02 апреля 2013

Это происходит в основном с HTC. Я столкнулся с той же проблемой. Если вы сначала подключились успешно, но впоследствии потерпели неудачу, просто перезапустите телефон, и при этом служба, которая вышла из строя, перезапустится.

...