Android - Какой API можно использовать, чтобы увидеть, поддерживает ли устройство центральный режим BLE?
https://developer.android.com/guide/topics/connectivity/bluetooth-le
Центральный против периферийного. Это относится к самому соединению BLE. Устройство в центральной роли сканирует, ищет рекламу, а устройство в периферийной роли делает рекламу.
Чтобы проверить, поддерживает ли устройство "периферийный"/ рекламный режим, похоже, что я могу использовать getBluetoothLeAdvertiser ()
getBluetoothLeAdvertiser
добавлено в API уровня 21 публично
BluetoothLeAdvertiser getBluetoothLeAdvertiser () Возвращает объект BluetoothLeAdvertiser для операций Bluetooth LE Advertising. Возвращает ноль, если Bluetooth выключен или Bluetooth LE Advertising не поддерживается на этом устройстве.
Используйте метод isMultipleAdvertiseSupported(), чтобы проверить, поддерживается ли LE Advertising на этом устройстве, перед вызовом этого метода.
Теперь я слышал некоторые слухи о том, что некоторые устройства могут на самом деле дать вам BluetoothLeAdvertiser, но вернуть false на isMultipleAdvertisementSupported()
что само по себе является еще одной проблемой, но по центральной части документа ничего не сказано !
Я что-то пропустил? https://developer.android.com/reference/android/bluetooth/BluetoothAdapter ничего не говорит о центральном режиме. Я что-то упустил здесь? Спасибо за любую помощь. Я слышал, что Bluetooth - это проблема для Android, и это мой первый день изучения этих API.
1 ответ
Короткий ответ
Как указал DigitalNinja, телефон Android всегда будет поддерживать функции центральной роли по умолчанию, поэтому, если ваш телефон поддерживает BLE, он определенно может работать в центральной роли.
Длинный ответ
Вы правы, API может не быть простым, но это связано с тем, как Bluetooth Low Energy (BLE) API был добавлен к Android, и даже с историей самой технологии BLE.
Когда BLE был впервые представлен, он был предназначен только для датчиков (например, термометр, частота сердечных сокращений, близость и т. Д.) И устройств, которые взаимодействуют с этими датчиками. Датчики были периферийными устройствами в этом случае, и устройства, которые общаются с этими датчиками, являются центральными. Периферийные устройства были настоящими устройствами с низким энергопотреблением (LE), так как они просто рекламировали и отправляли данные время от времени. Центральные устройства, с другой стороны, не будут очень энергоэффективными, так как им придется постоянно сканировать устройства, подключаться к этим устройствам и нести ответственность за поддержание и мониторинг этого соединения, что означает, что радио будет включено гораздо дольше по сравнению с на периферию.
Когда API-интерфейс Bluetooth Low Energy (BLE) был добавлен в Android, он поддерживал только центральную роль. Другими словами, вы могли бы написать приложение Android для сканирования и подключения к периферийным устройствам (датчикам), но само устройство Android не могло выступать в качестве периферийного устройства (поскольку предполагалось, что вам не понадобится устройство Android, чтобы действовать в качестве датчика). Это было сделано в Android 4.3 (API 18).
Поскольку люди стали чаще использовать BLE и технология стала более зрелой, она стала использоваться для самых разных приложений (например, виртуальный последовательный порт, передача данных, маяки и т. Д.). Более того, на рынке стали появляться автономные центральные устройства, и на этапах разработки возникла необходимость использовать их с телефонами или, по крайней мере, протестировать их на телефонах / планшетах. Таким образом, различие между центральным и периферийным устройствами стало более размытым и нечетким, и возникла потребность в Android, чтобы начать поддерживать роль периферийных устройств. Именно тогда был обновлен API BLE для представления функциональности периферийных ролей, что произошло в Android 5.0 (API 21).
Поэтому, чтобы ответить на ваш вопрос, если BLE поддерживается на устройстве Android, можно с уверенностью заявить, что по умолчанию он будет поддерживать центральную роль, поскольку это является основой функциональности BLE для Android. Однако API был представлен позже для поддержки периферийной роли, поэтому не все устройства Android, поддерживающие BLE, будут поддерживать периферийную роль.
Наконец, обратите внимание, что isMultipleAdvertisingSupported - это другая функция, которая указывает, поддерживает ли ваше устройство одновременную рассылку нескольких объявлений. Некоторые устройства поддерживают одновременную рассылку разных объявлений, а другие - нет. Однако это не значит, что они вообще не поддерживают рекламу. Устройство, которое поддерживает isMultipleAdvertisementSupported
обязательно поддержу BluetoothLeAdvertiser
, но наоборот не гарантируется.
В заключение, самый безопасный способ проверить, поддерживает ли ваше устройство центральную и / или периферийную роль, - использовать версию Android и используемый уровень API, как показано двумя ссылками выше. На Android 5 (API 21) и выше вы можете писать приложения, которые поддерживают как центральные, так и периферийные роли, тогда как до этого вы можете писать приложения только для центральной роли.
Надеюсь, это поможет.