Не удалось обнаружить Bluetooth ->

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

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

Не удалось обнаружить службу.

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

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

Совет. Если вы подключаетесь к последовательной плате Bluetooth, попробуйте использовать известный SPP UUID 00001101-0000-1000-8000-00805F9B34FB. Однако, если вы подключаетесь к плееру Android, пожалуйста, создайте свой собственный уникальный UUID.

Ссылка

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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