Intereting Posts
Как разрешить только одну кнопку переключения Android из 3 одновременно Панель инструментов выбора текста не видна в версиях без зефира без ActionBar Захват уведомлений из других приложений Получение ClassNotFound Ошибка после обновления с ADT 16 до ADT 17 Как установить приложение в систему / приложение при разработке из студии Android Как создать Android Live Wallpaper с помощью Delphi XE5? Получить широту и долготу с помощью zipcode Используйте SyncAdapter для синхронизации с * локальными * gmail и facebook приложениями. Размер изображений в андроиде изображения Android – хочет поставить Button выше listview Osmdroid: Как я могу создать и загрузить карту из своих собственных растровых изображений (плитки)? Невозможно установить флаг отладки в AndroidManifest.xml В чем разница между вызовом LayoutInflater напрямую и нет? Не удалось установить приложение FriendPickerSample из-за неверного файла APK! Как установить цвет текста библиотеки закупок библиотеки для чего-то другого, кроме android: textColor?

Android 4.3 BTLE как сервер: как начать рекламу?

Я пытаюсь реализовать BTLE SERVER на Nexus 7 с новым BTLE API в 4.3. Я сталкиваюсь с несколькими проблемами. Во-первых, нет примеров с SDK. Единственный пример для клиента. Во-вторых, документация на самом деле говорит вам делать не то. В нем указано, что для получения объекта BluetoothGattServer необходимо использовать параметр BluetoothAdapter.getProfileProxy() with a BluetoothProfile.GATT_SERVER параметром BluetoothGattServer . Этот подход будет работать, но нельзя будет связать реализацию BluetoothGattServerCallback со стеком BLE. (Этот обратный вызов – это то, как каждый реагирует на запросы чтения и записи клиентов среди других вещей.) Однако, после спотыкания на проблеме 58582 разработчик указал на новый метод BluetoothManager.openGattServer() который принимает ваш обратный вызов как параметр и возвращает объект BluetoothGattServer . Ну, одна проблема решена.

Следующий вопрос более проблематичен. В документации BluetoothGattServer указано, что этот класс можно использовать для создания и рекламы услуг и характеристик Bluetooth LE. Создание сервисов и т. Д. Не было проблемой, но они не могли сказать, как начать рекламу. В самом классе или любом другом классе, который я могу найти, нет метода.

Кто-нибудь знает как это сделать? На данный момент все, что я вижу, это использовать тот же подход, что и клиент, но этот подход включает в себя сканирование (которое не является рекламой). Вся документация далее предполагает, что BluetoothAdapter.startLeScan() действительно ПРОСТО ТОЛЬКО для сканирования.

Итак, как мне вызвать рекламные объявления, когда все мои службы, характеристики и дескрипторы на месте?

Насколько я понимаю, реализация Android может действовать только как центральное устройство, а не как периферийное устройство. В Bluetooth Low Energy можно рекламировать только периферийные устройства. Центральное устройство может сканировать рекламные объявления с периферийных устройств и отправлять запросы на соединение в качестве ответов на (некоторые виды) рекламных объявлений, чтобы создать соединение с периферией.

В BLE существует различие между понятиями Central / Peripheral и Server / Client :

  • Центральное / периферийное устройство относится к сетевой архитектуре, где центральным является концентратор в звезде с одним или несколькими периферийными устройствами, подключенными к нему. Обычно это телефон, планшет или компьютер. Периферийное устройство может подключаться только к одному центральному за раз.

  • Сервер / клиент (сервер / клиент GATT) – это концепция более высокого уровня, связанная с данными, которые хранятся в устройствах и, возможно, передаются по соединению. Как центральные, так и периферийные устройства могут реализовывать сервер GATT и клиент GATT, но не обязательно иметь оба.

Поэтому, чтобы ответить на ваш вопрос: вы не можете вызывать рекламу. Вам нужно будет начать сканирование периферийных устройств, чтобы иметь возможность подключиться к одному или нескольким из них.

Надеюсь это поможет.

Вам потребуется API-уровень 21.

 import android.bluetooth.le; ... ... BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter myBluetoothAdapter = bluetoothManager.getAdapter(); BluetoothLeAdvertiser myBluetoothLeAdvertiser = myBluetoothAdapter.getBluetoothLeAdvertiser (); myBluetoothLeAdvertiser.startAdvertising (AdvertiseSettings settings, AdvertiseData advertiseData, AdvertiseCallback callback); 

Полезная ссылка: https://developer.android.com/about/versions/android-5.0.html

Кажется, что getProfileProxy не отвечает на запрос GATT или GATT_SERVER . API предлагает рекламную поддержку, но кода еще нет. (Android Issue Tracker)

Одновременно реализованные API-интерфейсы наполовину были выпущены, когда NFC был представлен, и Google повторил, добавив более хорошо округленные функциональные возможности с последующими выпусками.

Как я вижу, возможности рекламы BLE (ака периферийного режима) будут добавлены в Android с предстоящей версией 4.4.3 Kitkat. Он должен быть выпущен на следующей неделе, но журнал изменений уже случайно просочился, см. Кэш Google или в строке 2554: периферийный режим (3/4): добавьте API периферийного режима .

Думаю, мы скоро узнаем.