Когда андроид показывает диалог сопряжения при использовании небезопасных разъемов 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, это бы мне очень помогло.

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

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

В настоящее время у меня такая же проблема, как и вы. Я разработал приложение для обмена сообщениями между терминалами 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) – Коренные

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

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

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

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