Ладно, вот в чем дело. У меня есть два телефона Galaxy Nexus, оба с включенным bluetooth.
Я написал приложение для управления Bluetooth-соединением, которое я использую для обнаружения и подключения устройств. Он также выводит все доступные UUID, которые могут поддерживать устройства.
Из http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm следующего стандарта UUID доступны для устройств Galaxy Nexus.
- 0x1116 — ПДД
- 0x112f — PBAP (профиль доступа к телефонной книге)
- 0x111f — HFP (свободные руки)
- 0x1105 — OPP (профиль отправки объекта)
- 0x1112 — HSP (профиль гарнитуры)
- 0x110c — АВРКП
- 0x110a - A2DP
Я пытаюсь подключиться через профиль OPP (UUID 00001105-0000-1000-8000-00805F9B34FB
) и проталкивать объекты (файлы) между устройствами. Я просмотрел всю документацию Android API о том, как обнаружить, соединить/связать (потоковое и т. д.) и управлять всеми соединениями Bluetooth. Мне удалось успешно подключиться и поговорить с устаревшим устройством платы через профиль SPP (0x1101).
Однако, когда я пытаюсь использовать socket.connect()
между двумя телефонами Galaxy Nexus, появляется диалоговое окно сопряжения, и я нажимаю кнопку Pair
на обоих устройствах. После этого я сразу получаю Connection Refused IOException
. Обратите внимание, что после того, как сопряжение произошло один раз, меня больше никогда не спрашивают, что имеет смысл, поскольку безопасная ссылка кэшируется.
Если я не могу подключиться к этим стандартным профилям, используя эти стандартные UUID, почему они открыты? Как я могу подключиться из своего приложения к любому из этих профилей и взаимодействовать с ними? Это потому, что моему приложению как-то не доверяют? Странно то, что даже функционал Share
на Android тоже вообще не работает. Это что-то полностью сломанное на Android?
Пожалуйста, не давайте мне намеков на использование «хорошо известного UUID SPP one 0x1101», как говорится в документации. Это не то, чего я хочу. У меня довольно хорошее понимание того, как это работает, и я ищу реальное решение или объяснение проблемы.
Я видел типичное решение «отражение», но я не понимаю, почему это все еще проблема на Android? Почему люди используют отражение, чтобы заставить это работать? Можем ли мы зарегистрировать ошибку на Android, чтобы исправить это?
Если эти UUID являются стандартными, любое приложение должно иметь возможность подключаться и взаимодействовать с ними. Почему это проблема и почему я получаю это исключение?
Заранее спасибо.
ОБНОВЛЕНИЕ
Итак, по какой-то причине заработал объектный толчок в системе Android. Я на самом деле пытался подключиться через свое приложение, и оно не работало. Затем я зашел в приложение «Контакты» и попытался поделиться контактом, который волшебным образом сработал. Затем я вернулся к своему приложению, и теперь оно работает... вау. Это очень странно, и этому должно быть объяснение.
socket.connect()
, он предлагает мне диалоговое окно сопряжения и заполненный номер ключа доступа. К сожалению, сразу после того, как я получаю исключение Connection Refused IOException. - person dnkoutso   schedule 19.09.2012