openGattServer (context, mGattServerCallback), похоже, не открывает gattserver, почему? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать в своем приложении gattserver, чтобы он мог действовать как периферийное устройство. Сначала я заметил, что код, который я написал для центрального (клиентского), не может подключиться к серверу (метод BluetoothGattCallback onConnectionStateChange выдает печально известный статус 113). Затем я попытался подключиться через приложение Playstore nrf connect , что тоже было невозможно. Хотя реклама (тоже сделанная в моем коде) работает. Клиентский код, а также nrf connect сканируют и обнаруживают мои рекламные объявления. Вот как я хотел запустить свой сервер:

BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mGattServer = mBluetoothManager.openGattServer(this, mGattServerCallback);

Я определил gattservercallback раньше, поэтому строка выполняется, и я получаю не NULL экземпляр BluetoothGattServer обратно, точно так, как я хотел, я мог бы даже добавить service без каких-либо проблем:

btGattServer.addService(createService());

(createService возвращает экземпляр Service)

Я был бы очень признателен за помощь с этим! Если кому-то понадобится дополнительная информация или еще какой-то код (например, код, запускающий рекламу), я буду рад обновить свой вопрос!

1 Ответ

0 голосов
/ 28 мая 2020

Я сам разобрался:

Чтобы запустить рекламу, нужно вызвать startAdvertising на экземпляре Advertiser. Для этого вызова необходимы три аргумента, один из которых является объектом AdvertiseSettings. Когда я создал этот объект с помощью построителя AdvertiseSettings, я не включил .setConnectable(true).

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

...