Не удалось обнаружить 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. Я столкнулся с такой же проблемой. Если вы впервые подключились успешно, но потом проиграли, просто перезапустите телефон, и служба, которая не удалась, перезапустится при этом.