Когда андроид показывает диалог сопряжения при использовании небезопасных разъемов blcetooth RFCOMM?

Я пытаюсь подключить два непарных устройства Android через Bluetooth для сетей P2P. Защита MitM не требуется. Android имеет createInsecureRfcommSocketToServiceRecord и listenUsingInsecureRfcommWithServiceRecord для этого (начиная с уровня API 10), который отлично работает на современных устройствах. Тем не менее, на Galaxy Ace (Android 2.3.3 = уровень API 10, подключающийся к Galaxy Nexus), он создает диалог сопряжения. Это происходит как при входящих, так и исходящих соединениях. ( Обновление: обновление Galaxy Ace до Android 2.3.6, по-видимому, устраняет проблему. Существует ли конкретная версия Android, которая всегда/никогда не делает это?)

После согласования соединения соединение работает. По этой причине я думаю, что это не связано с Проблема 40101: createInsecureRfcommSocketToServiceRecord вызывает диалог сопряжения на Android 4.2, который должен произойти только в том случае, если служебная запись не существует.

Я предполагаю, что этого диалогового окна нельзя избежать на устройствах, где он появляется (если это возможно, объяснение того, как это сделать, является допустимым ответом). По этой причине я хотел бы знать, когда появляется такой диалог. Я ничего не нашел в источнике Android Java (он довольно быстро подходит для родных). Я сомневаюсь, что это имеет какое-то отношение к версии Bluetooth, поскольку Ace имеет Bluetooth 2.1, который должен поддерживать необходимые соединения "просто работает".

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

Кроме того, я ищу способ легко исключить такие устройства.

Ответ 1

В настоящее время у меня такая же проблема, как и у вас. Я разработал приложение для обмена сообщениями между терминалами BT, и я тестирую его на разных телефонах (у меня есть S3, S2, S plus, Nexus One и Galaxy Y) для анализа поведения. Телефоны имеют следующие характеристики:

  • Samsung S2: Пользовательский ПЗУ (Android v4.2.1) - Корневой
  • Samsung S3: Stock ROM (Android v4.1.2)
  • Samsung S +: Пользовательский ПЗУ (Android v4.1.2) - Корневой
  • Samsung GY: Пользовательское ПЗУ (Android v2.3.6) - Корневое
  • Nexus One: Stock ROM (Android v2.3.6) - Rooted

Насколько я могу судить по моему опыту, S2 ​​и S3 через некоторое время начинают показывать диалог сопряжения, даже если они уже спарены и обмениваются данными. Это происходит все время, когда я включаю один из этих двух телефонов в свой тестовый стенд, другие работают нормально и никогда не просят спаривания (особенно Nexus One, который имеет безупречное поведение).

Я провел длительные тесты (от 4 до 6 часов), и я до сих пор не могу понять, почему эти телефоны просят спарить иногда через 3 часа.. иногда через 10 минут.

Единственное, что я хотел бы указать вам, это то, что даже если u использует небезопасное соединение, вас все равно можно попросить о взаимодействии с человеком для спаривания. Посмотрите на это (взято из http://en.wikipedia.org/wiki/Bluetooth):

Просто работает. Как видно из названия, этот метод работает. Нет пользователей требуется взаимодействие; однако устройство может запросить пользователя для подтвердите процесс сопряжения. Этот метод обычно используется гарнитурами с очень ограниченными возможностями ввода-вывода и более безопасен, чем фиксированный PIN-код, который обычно используется для устаревшего сопряжения этим набором ограниченных устройств. Этот метод не обеспечивает человека в середине (MITM) защита.