Получить программный протокол Wi-Fi (802.11a/b/g/n)

Через WifiManager мое приложение для Android может получить много информации о Wi-Fi. Однако я не могу получить тип протокола, например, a/b/g/n. У меня есть требование клиента сделать это.

Кто-нибудь знает, как это достичь? (У меня нет возможности использовать adb). Это делается программно. Я твердо верю, что устройство и маршрутизатор уже согласовали протокол, прежде чем они смогут подключиться. Так что информация есть с устройством. Вопрос в том, как мы его получаем?

Ответы

Ответ 1

Вы можете частично вывести протокол со скорости ссылки

WifiManager.getConnectionInfo().getLinkSpeed()

По Таблица протоколов скорости Википедии 802.11 вы можете узнать, является ли это 802.11b, 802.11n или 802.11ag.
802.11n и 802.11ac таблицы скорости полной ссылки

Скорость передачи протоколов 802.11a и 802.11g одинакова, вы можете различать их по используемой частоте (5 ГГц или 2,4 ГГц) в результатах сканирования.

Обратите внимание, что протокол может меняться во время соединения, клиент и точка доступа ведут переговоры о протоколах и скоростях, но они соглашаются на список, а не на одну конкретную скорость.

Я не думаю, что есть способ различать 802.11n и 802.11ac в их перекрывающихся скоростях.

Ответ 2

Я не верю, что это можно получить чистым способом. Протоколы - a, b, g, n и т.д. - фактически являются человеческими абстракциями MAC и физического уровня в сетях. Они определяются как их распознаваемые буквы, если они соответствуют определенным техническим характеристикам оборудования как для устройства, так и для сетевого устройства.

После некоторого копания кажется, что телефоны Windows могут отображать эту информацию. Когда вы определяете способ определения протокола в Windows, я столкнулся с описанием рабочего стола, а также Реализация Visual С++ через enums. Похоже, что даже официальная документация Windows опирается на предоставленные поставщиком данные и перечисленные значения, что привело бы к тому, что они должны были определить технические характеристики оборудования, превышающие то, что может быть показано в Android API.

Если вы хотите определить протокол самостоятельно, вам нужно будет понять скорость связи, а также частоту, модуляцию и пропускную способность.

TL; DR

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