Enable bluetooth page scan что
Android Bluetooth Low Energy (BLE) — готовим правильно, часть #1 (scanning)
Содержание
Часть #1 (scanning), вы здесь.
Могу точно сказать – это было сложней, чем представлял, мне пришлось приложить немало усилий для стабильной работы под Android. Я изучил много статей в свободном доступе, некоторые оказались ошибочными, многие были очень полезными и помогли в деле. В этой серии статей я хочу описать свои выводы, чтобы вы не тратили уйму времени на поиски как я.
Особенности работы BLE под Android
Google документация по BLE очень общая, в некоторых случаях нет важной информации или она устарела, примеры приложений не показывают, как правильно использовать BLE. Я обнаружил лишь несколько источников, как правильно сделать BLE. Презентация Stuart Kent дает замечательный материал для старта. Для некоторых продвинутых тем есть хорошая статья Nordic.
Производители делают изменения в Android BLE стеке или полностью заменяют на свою реализацию. И надо учитывать разницу поведения для разных устройств в приложении. То что прекрасно работает на одном телефоне, может не работать на других! В целом не все так плохо, например реализация Samsung сделана лучше собственной реализации от Google!
В Android есть несколько известных (и неизвестных) багов которые должны быть обработаны, особенно в версиях 4,5 и 6. Более поздние версии работают намного лучше, но тоже имеют определенные проблемы, такие как случайные сбои соединения с ошибкой 133. Подробнее об этом ниже.
Не претендую на то, что я решил все проблемы, но мне удалось выйти на «приемлемый» уровень. Начнем со сканирования.
Сканирование устройств
Перед подключением к устройству вам нужно его просканировать. Это делается при помощи класса BluetoothLeScanner :
… дополнительные данные, см. документацию по ScanResult здесь.
Настраиваем фильтр для сканирования
Вообще можно передать null вместо фильтров и получить все ближайшие устройства, иногда это полезно, но чаще требуются устройства с определенным именем или набором UUID сервисов.
Сканирование устройств по UUID сервиса
Используется если вам необходимо найти устройства определенной категории, например мониторы артериального давления со стандартным сервисным UUID: 1810. При сканировании устройство может содержать в Advertisement data UUID сервис, который характеризует это устройство. На самом деле эти данные ненадежные, фактически сервисы могут не поддерживаться, или подделываться Advertisement data данные, в общем тут есть творческий момент.
Прим. переводчика: одно из моих устройств со специфичной прошивкой, вообще не содержало список UUID сервисов в Advertisement data, хотя все остальные прошивки этого устройства работали ожидаемо.
Пример сканирования службы с артериальным давлением:
Обратите внимание на короткий UUID (например 1810 ), он называется 16-bit UUID и является частью длинного 128-bit UUID (в данном случае 00001810-000000-1000-8000-000-00805f9b34fb ). Короткий UUID это BASE_PART длинного UUID, см. спецификацию здесь.
Сканирование устройств по имени
Поиск устройств использует точное совпадение имени устройства, обычно это применяется в двух случаях:
поиск конкретного устройства
Сканирование устройств по MAC-адресам.
Обычно применяется для переподключения к уже известным устройствам. Обычно мы не знаем MAC-адрес девайса, если не сканировали его раньше, иногда адрес печатается на коробке или на корпусе самого устройства, особенно это касается медицинских приборов. Существует другой способ повторного подключения, но в некоторых случаях придется еще раз сканировать устройство, например при очистке кеша Bluetooth.
Вероятно вы уже поняли, что можно комбинировать в фильтре UUID, имя и MAC-адрес устройства. Выглядит неплохо, но на практике я не применял такое. Хотя может быть вам это пригодится.
Настройка ScanSettings
ScanSettings объясняют Android как сканировать устройства. Там есть ряд настроек, которые можно задать, ниже полный пример:
ScanMode
Безусловно, это самый важный параметр. Определяет метод и время сканирования в Bluetooth стеке. Такая операция требует много энергии и необходим контроль над этим процессом, чтобы не разрядить батарею телефона быстро. Есть 4 режима работы, в соответствии с руководством Nordics и официальной документацией:
Callback Type
Эта настройка контролирует как будет вызываться callback со ScanResult в соответствии с заданными фильтрами, есть 3 варианта:
Match mode
Настройка того, как Android определяет «совпадения».
Number of matches
Параметр определяет сколько advertisement данных необходимо для совпадения.
Report delay
Важно: есть известный баг для Samsung S6 / Samsung S6 Edge, когда все результаты сканирования имеют один и тот же RSSI (уровень сигнала) при задержке больше нуля.
Кеширование Android Bluetooth стека
Очистка кеша
Bluetooth кеш, как и любой другой, не существует вечно, есть 3 ситуации, когда он очищается:
Выключение и включение системного переключателя Bluetooth
Очистка данных приложения (в ручном режиме в настройках телефона)
Это достаточно неудобный момент для разработчиков, потому что телефон часто перезагружается, пользователь может включать-выключать самолетный режим. Есть еще различия между производителями телефонов, например на некоторых телефонах Samsung, кеш не очищался при выключении Bluetooth.
Это значит, что нельзя полагаться на данные об устройстве из BT кеша. Есть небольшой трюк, он поможет узнать закешировано ли устройство или нет:
Это важный момент, если нужно подключиться к устройству позже, не сканируя его. Подробнее об этом позже.
Непрерывное сканирование?
Вообще хорошая практика – избегать непрерывного сканирования потому что, это очень энергоемкая операция, а пользователи любят, когда батарея их смартфона работает долго. Если вам действительно нужно постоянное сканирование, например при поиске BLE-маячков, выберите настройки сканирования с низким потреблением и ограничивайте время сканирования, например когда приложение находится только на переднем плане (foreground), либо сканируйте с перерывами.
Плохая новость в том, что Google в последнее время ограничивает (неофициально) непрерывное сканирование:
с Android 7 запуск и останов сканирования более 5 раз за 30 секунд временно отключает сканирование.
Непрерывное сканирование в фоне
Google значительно усложнил сканирование на переднем плане. Для фонового режима вы столкнетесь с еще большими трудностями! Новые версии Android имеют лимиты на работу служб в фоновом режиме, обычно после 10 минут работы, фоновый сервис прекращает свою работу принудительно. Посмотрите возможные решения этой проблемы:
Проверка разрешений (permissions)
Есть еще несколько важных моментов, прежде чем мы закончим статью. Для начала сканирования нужны системные разрешения (permissions):
Убедитесь, что все разрешения одобрены, или запросите их у пользователя. Разрешение ACCESS_COARSE_LOCATION Google считает «опасным» и для него требуется обязательное согласие пользователя.
Прим. переводчика, в моем проекте для корректной работы с BLE потребовалось еще 2 разрешения: ACCESS_FINE_LOCATION (для API ACCESS_BACKGROUND_LOCATION обсуждение на Stackoverflow.
В итоге полный список разрешений включая версию Android10:
Заключение
Мы научились запускать сканирование BLE устройств с учетом жизненного цикла Activity (Fragment / Service), использовать фильтры и различные настройки сканирования, также узнали все нужные разрешения (permissions) для удачного запуска сканирования и особенности работы Android-Bluetooth кеша. В следующей статье мы погрузимся глубже в процесс подключения и отключения к устройствам.
Как проводить сканирования Bluetooth на Android
В этой статье поговорим про сканирования Bluetooth на Android. И покажем, как это сделать двумя способами, в одном из которых нашей целью будет дальнейшая работа с устройством; второй способ будет заключаться в том, чтобы отследить информацию о найденных девайсах, узнать их тип, адрес и прочее.
Сканирование стандартным методом
Данную процедуру будем выполнять стандартными функциями, встроенными в ваше мобильное устройство. Как упомянули раньше, этот метод разрешит нам выполнять действия с найденными аппаратами, то есть, ваш, например, смартфон будет взаимодействовать с другим устройством.
Для того чтобы произвести такой поиск, выполните следующие действия:
После этих действий должно отобразиться окно, в котором будет список найденных устройств. Если же в списке нет ни одного устройства, нужно вручную просканировать находящиеся вблизи вас девайсы.
После чего должен отобразиться список с вариантами действий над выбранным гаджетом. Могут встретиться такие варианты, как:
Сканирование информации
Этот метод стоит использовать для вычисления данных об неизвестном устройстве, находящимся рядом с вами. А именно: узнать тип девайса, адрес и даже местоположение относительно вас.
Учтите, что программа имеет только англоязычную локализацию.
Рассмотрим, как работает данное приложение:
После запуска сразу начнется сканирование новых устройств. Все найденные аппараты будут показаны на дисплее с информацией о них.
По каждому аппарату будут предоставлены такие данные:
Enable bluetooth page scan что
Краткое описание:
Сканирование и обнаружение ваших Bluetooth Low Energy (BLE) устройств
Описание:
nRF Connect for Mobile is a powerful generic tool that allows you to scan, advertise and explore your Bluetooth low energy (BLE) devices and communicate with them. nRF Connect supports number of Bluetooth SIG adopted profiles together with Device Firmware Update profile (DFU) from Nordic Semiconductors and Mcu Manager on Zephyr and Mynewt.
Features:
— Scans for Bluetooth low energy (BLE) devices
— Parses advertisement data
— Shows RSSI graph, allows export to CSV and Excel formats
— Connects to a connectible the Bluetooth LE device
— Discoveries and parses services and characteristics
— Allows to read and write characteristics
— Allows to enable and disable notifications and indications
— Supports Reliable Write
— Parses number of characteristics adopted by Bluetooth SIG
— BTLE advertising (Android 5+ required)
— Read and update PHY (Android 8+ required)
— GATT Server configuration
— Supports Device Firmware Update profile which let the user to upload a new application, SoftDevice or a bootloader over-the-air (OTA) from a HEX file
— Supports the Nordic UART Service
— Allow to record and replay common operations using Macros
— Allows to perform automated tests defined in XML file on Bluetooth Smart devices.
Visit the GitHub page: https://github.com/Nor…or/Android-nRF-Connect for more information about automated tests and creating init packets for the DFU.
Works well with nRF Logger application, that will store your logs in case something bad happens with nRF Connect.
Download nRF Logger from: https://play.google.co…nordicsemi.android.log
Требуется Android: 4.3+
Русский интерфейс: Нет
Скачать:
Версия: 4.24.3 Обновление GP (Владимир Евсеенко)
Версия: 4.22.3 nRF Connect (volkodav1975)
версия: 4.22.0 nRF Connect_v4.22.0(105).apk ( 9.23 МБ )
Гостевая статья Как отследить и подключиться к устройствам Bluetooth с помощью Kali Linux
Хотя многие люди могут использовать Bluetooth каждый день, большинство не знают, как он работает или что его можно взломать. Взлом Bluetooth дает четкое окно в мир цели. Почти каждое устройство имеет возможности Bluetooth, и люди хранят большое количество личной информации на своих телефонах и планшетах. Взломайте их Bluetooth-соединение, и вы сможете получить доступ ко всей этой информации.
Во-первых, они постоянно перепрыгивают частоты, поэтому если у вас есть два устройства, взаимодействующих по Bluetooth, они оба используют алгоритм, который смещает частоту много раз в секунду. Это означает, что мы не можем просто сидеть на одной частоте и слушать, потому что они будут прыгать повсюду. Это затрудняет атакующему прослушивание разговора в первую очередь.
Другим свойством является то, что Bluetooth не договаривается о ключах каждый раз, как Wi-Fi делает, где это легко для всех, чтобы присоединиться и покинуть Wi-Fi сети. Вместо этого, Bluetooth договаривается о ключе один раз в начале, хранит секретный ключ, а затем ссылается на него каждый раз, когда видит одно и то же устройство. Это означает, что невозможно сидеть там и нюхать ключ, потому что вам нужно быть там в первый раз, когда эти устройства взаимодействуют. В противном случае вы не получите ничего полезного, и невозможно прыгнуть в разговор так, как это возможно с Wi-Fi.
Тем не менее, мы все равно можем отследить ближайшие Bluetooth-устройства, прочитать с них и даже записать специфические характеристики. Поэтому полезно провести рекогносцировку на случай, если мы сможем либо взять устройство под свой контроль, выявить уязвимость, либо позже найти уязвимость, совпадающую с той, что находится поблизости.
Что вам понадобится для Bluetooth-разведки?
Для начала Bluetooth-наблюдения Вам понадобится полностью обновленная версия Kali Linux, потому что мы будем использовать встроенные инструменты Bluetooth. Чтобы сохранить супер-основные вещи, мы не устанавливаем ничего лишнего, и мы можем просто работать с Bluetooth инструментами, которые Kali Linux имеет по умолчанию.
Конечно, мы должны быть достаточно близко к тому, чтобы взломать Bluetooth. С помощью отличного Bluetooth-адаптера, который нужен, вы должны быть в состоянии добраться до Bluetooth-устройств в кафе, школьном классе, офисе, а может быть, даже в соседнем доме.
В моем примере мы видим интерфейс Bluetooth. Это то, что мы будем использовать с Bluetooth. Его текущее состояние не работает, и первое, что нам нужно сделать для работы с Bluetooth, это включить наш интерфейс.
На странице руководства мы видим, что это используется для настройки устройств Bluetooth, поэтому, если у вас есть это внешнее устройство Bluetooth или что-то подключенное, вы также можете использовать это, чтобы увидеть подключенные устройства и настроить их соответствующим образом.
Hcitool используется для настройки и выполнения различных задач, таких как сканирование, запросы и извлечение имен. Это действительно полезно, чтобы узнать об устройстве, но некоторые из этих команд требуют MAC-адрес для их использования.
Давайте посмотрим на некоторые из этих команд. Сначала мы сделаем сканирование. Он будет использовать интерфейс Bluetooth для сканирования ближайших устройств Bluetooth и представления их MAC-адресов, чтобы мы могли выполнить дополнительное сканирование, запрос или попытаться получить имя устройства.
Это позволяет нам настраивать, контролировать и опрашивать серверы SDP (протокол обнаружения служб). Так что это то, что позволяет нам делать запросы на устройствах Bluetooth и точно выяснять, что происходит с разрешениями и что мы, вероятно, можем начать делать с этими службами.
Здесь мы можем увидеть немного больше информации об обмене данными, протоколах и, возможно, мы могли бы даже начать обнаруживать, есть ли уязвимость в устройстве или мы можем связаться с ним напрямую. Мы можем даже узнать, использует ли он рандомизацию MAC-адреса или что-то в этом роде.
Это указывает на то, что устройство находится в пределах досягаемости и доступно.
Здесь мы можем увидеть название устройства, когда оно впервые увидено, владельца, который интересен, а затем еще немного информации о различных рекламируемых функциях.
Если у вас нет Bluetooth на вашем компьютере, вы всегда можете подключить адаптер Bluetooth, но вы можете проверить его совместимость, прежде чем идти дальше и решать проблемы. Я не уверен, что каждый адаптер Bluetooth будет работать с любой программой Linux.
Выше видно, что мы нашли второе устройство, так что давайте продолжим и нажмем на него.
Все вышесказанное сделано с помощью полностью обновленной версии Kali Linux, и нам не пришлось ничего устанавливать. Так что, если вы начинаете с Kali Linux заново, то это отличный способ использовать некоторые из встроенных инструментов, чтобы связаться и прикоснуться к Bluetooth-устройствам вокруг вас, и начать узнавать больше о том, на что способен каждый из этих универсальных и мощных инструментов.
То, что мы узнали в статье.
Сегодня мы изучили разведку Bluetooth, и есть несколько более сложных вещей, которые мы можем сделать с этой информацией. Многие устройства Bluetooth не пытаются рандомизировать свой MAC-адрес, а это означает, что он будет одинаковым все время. Это может быть использовано для отслеживания человека с места на место.
Создайте сканер Bluetooth с Android API Bluetooth
Bluetooth стал очень популярной технологией, особенно на мобильных устройствах. Это технология для обнаружения и передачи данных между соседними устройствами. В наши дни практически каждое современное мобильное устройство обладает возможностями Bluetooth. Если вы хотите создать интерфейс приложения с другим устройством с поддержкой Bluetooth, от телефонов до динамиков, вы должны знать, как использовать Bluetooth API Android.
В этом уроке мы будем создавать приложение, аналогичное встроенному приложению Bluetooth в настройках Android. Он будет включать в себя следующие функции:
1. Включение Bluetooth
Прежде чем мы сможем включить Bluetooth на устройстве Android, нам нужно запросить необходимые разрешения. Мы делаем это в манифесте приложения. Разрешение BLUETOOTH позволяет нашему приложению подключаться, отключаться и передавать данные с другого устройства Bluetooth. Разрешение BLUETOOTH_ADMIN позволяет нашему приложению обнаруживать новые устройства Bluetooth и изменять настройки Bluetooth устройства.
2. Получение списка сопряженных устройств
На этом этапе мы сканируем сопряженные устройства Bluetooth и отображаем их в виде списка. В контексте мобильного устройства устройство Bluetooth может быть:
3. Откройте для себя близлежащие устройства Bluetooth
Вот и все. Мы закончили наш сканер Bluetooth.
4. Подключение к устройству
Например, предположим, что вы создаете приложение для чата, которое использует Bluetooth для общения с другими соседними пользователями. Чтобы найти других пользователей для чата, вам нужно поискать другие устройства с установленным приложением чата. Для этого мы будем искать UUID в списке сервисов соседних устройств. Использование UUID для прослушивания и принятия подключений Bluetooth автоматически добавляет этот UUID в список служб телефона или в протокол обнаружения служб.
В следующем фрагменте кода показано, как подключиться к данному BluetoothDevice :