Intereting Posts
Когда приложение переходит к фону во время выполнения AsyncTask, что он должен делать? JellyBean Webview будет автоматически фокусировать html-элемент с подсветкой при навигации с помощью клавиатуры и не может отключить его Преобразование координат устройства в координаты мира Учебники Android NDK? Android: как обрабатывать ошибку в try catch без принудительного закрытия Календарное событие сохраняется локально на телефоне, но не может синхронизироваться с Календарем Google. Как Google Now (сейчас на «входе») ищет внутри приложений? Как преобразовать вид в растровое изображение с тенью в Android L Android как сделать AutoCompleteTextView работать как окно поиска Google Компиляция библиотеки Android-OpenCV с помощью Cygwin Горизонтальное и вертикальное прокручивание в android с использованием многомерного массива У эмулятора Android 4.0 всегда есть аварийный Launcher? Android: эмулятор не запускается Как обновить PreferenceActivity, чтобы показать изменения в настройках? Есть ли способ добавить вертикальную линию между каждой вкладкой в ​​TabLayout

BLE с Android 5.0: Как заставить устройство действовать как Central AND Server?

Я использую два устройства Android 5.0 для общения через Bluetooth Low Energy, и я не хочу:

  • Устройство 1 действует как центральный и сервер .

  • Устройство 2 действует как периферийное устройство и клиент .


Это поведение, которое я бы хотел достичь:

1) Устройство 2 начинает рекламу (периферийная роль).

2) Устройство 1 начинает сканирование (центральная роль) и получает рекламное устройство (объект BluetoothDevice) через метод ScanSallback onScanResult.

3) Теперь я хочу, чтобы рекламное устройство (Устройство 2) было уведомлено о том, что оно было отсканировано и сможет получить BluetoothDevice, связанную с устройством 1.

4) Устройство 1 имеет экземпляр BluetoothGattServer. Устройство 2 теперь вызовет connectGatt (контекст контекста, логический автосоединение, обратный вызов BluetoothGattCallback) на устройстве 1, чтобы получить экземпляр BluetoothGatt.

5) В конце концов, Device 1 является сервером, а устройство 2 – клиентом.


До сих пор я обнаружил, что на шаге 2, когда устройство 1 содержит BluetoothDevice для устройства 2, оно может подключаться только как клиент, как на шаге 4, используя connectGatt.

Я мог бы использовать BluetoothGattServer, определенный в Device 1, и вызвать: gattServer.connect (устройство BluetoothDevice, boolean autoConnect) с устройством, являющимся устройством 2.

Но как устройство 2 будет уведомлено, к чему оно связано?

И как мне получить экземпляр BluetoothGatt на устройстве 2, если я не могу позвонить connectGatt (Context, boolean, BluetoothGattCallback) на BluetoothDevice ?

Заранее спасибо за вашу помощь !

Некоторая документация:

BluetoothGattServer

BluetoothDevice

1) Устройство 2 начинает рекламу (периферийная роль).

Периферическая роль будет рекламировать, не забудьте добавить CONNECTABLE

AdvertiseSettings.Builder settingBuilder = new AdvertiseSettings.Builder(); settingBuilder.setConnectable(true); 

И начните рекламу соответственно.

2) Устройство 1 начинает сканирование (центральная роль) и получает рекламное устройство (объект BluetoothDevice) через метод ScanSallback onScanResult.

Совершенно, теперь вызывайте connectGatt на этом устройстве (периферийном), убедитесь, что вы прекратили рекламу после того, как получаете необходимое устройство, иначе вы в конечном итоге отправите несколько команд подключения.

3) Теперь я хочу, чтобы рекламное устройство (Устройство 2) было уведомлено о том, что оно было отсканировано и сможет получить BluetoothDevice, связанную с устройством 1.

Когда вы вызываете connectGatt из роли Central / client, ваше периферийное устройство получит уведомление в своем BluetoothGattServerCallback'onConnectionStateChange .

Там вы узнаете, что соединение было сделано. Хотя вам необходимо зарегистрировать gatt Service с характеристиками на периферийной стороне.

4) Устройство 1 имеет экземпляр BluetoothGattServer. Устройство 2 теперь вызовет connectGatt (контекст контекста, логический автосоединение, обратный вызов BluetoothGattCallback) на устройстве 1, чтобы получить экземпляр BluetoothGatt.

Неправильно, устройство 1 инициирует соединение, как я указал в пункте 3. Оба устройства onConnectionStateChange будут вызваны, чтобы знать, что соединение было сделано.

5) В конце концов, Device 1 является сервером, а устройство 2 – клиентом.

Неправильно, устройство 2 является периферийным (Server), устройство 1 – Monitor (Client)

Вы должны повернуть его немного. Сканер – это тот, который подключается к рекламодателю. Dev1 проверяет ответ dev2 и ответ сканирования. То dev1 должен подключиться. Dev2 получит обратный вызов при подключении. Нет обратного вызова, когда кто-то слышит ваш запрос или запрашивает ответ на проверку на Android. Вместо этого отметьте 0x14 «Список 16-битных запросов UUID» от btsig, если вы хотите рекламировать запрос для серверов с определенным сервисом для подключения к вам. Это немного необычно, потому что это используется.