- Русские Блоги
- Разработка периферийных устройств Android Bluetooth
- Что такое периферийное оборудование
- Конфигурация
- Включите Bluetooth
- Строить сервис
- Открытая трансляция
- Широковещательный обратный вызов
- Обратный вызов службы Gatt
- Выпишите данные
- Как подключить Android к периферийному устройству Bluetooth
- Переферийное устройство Bluetooth
Русские Блоги
Разработка периферийных устройств Android Bluetooth
Эта статья охватывает толькоактуальныйСамый в разработкеБазовыйКонцепция, использование и код, но более глубокие концепции и исходный код.
Что такое периферийное оборудование
- BLE (Bluetooth 4.0+) имеет два режима состояния: центральный и периферийный.
- Большинство центральных устройств играют роль мобильных телефонов, компьютеров и других устройств, которые могут активно подключаться к другим, в то время как большинство периферийных устройств ожидают подключения этих центральных устройств, например браслетов и глюкометров.
- Android отLolipop Началась поддержка разработки BLE Peripheral (периферийное оборудование).
- Если вы хотите перевести устройство Android в режим периферийного устройства, читайте дальше.
Конфигурация
ВAndroidManifest.xml Добавьте следующие разрешения:
Включите Bluetooth
// Поддерживать ли ble if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) < Toast.makeText(mContext, "hasSystemFeature == false", Toast.LENGTH_SHORT).show(); return false; >// Могу ли я получить услугу Bluetooth mBluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE); if (mBluetoothManager == null) < Toast.makeText(mContext, "mBluetoothManager == null", Toast.LENGTH_LONG).show(); return false; >// Получаем адаптер Bluetooth mBluetoothAdapter = mBluetoothManager.getAdapter(); if (mBluetoothAdapter == null) < Toast.makeText(mContext, "BluetoothAdapter == null", Toast.LENGTH_LONG).show(); return false; >// Включен ли Bluetooth if (!mBluetoothAdapter.isEnabled()) < Toast.makeText(mContext, "BluetoothAdapter.isEnabled == false", Toast.LENGTH_LONG).show(); return false; >// Получить вещателя mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser(); if (mBluetoothLeAdvertiser == null)
Здесь, если mBluetoothLeAdvertiser пуст, смените устройство, чтобы продолжить (некоторые отечественные модели не поддерживают)
Строить сервис
// Даем кокетливое название трансляции, по умолчанию это имя Bluetooth в настройках телефона mBluetoothAdapter.setName("Bleoo"); // Этот обратный вызов является обратным вызовом всех состояний после успешного вещания устройства, включая чтение, запись и т. Д. mGattServerCallback = new PeriServerCallBack(); // Открываем GattServer mGattServer = mBluetoothManager.openGattServer(mContext, mGattServerCallback); // Создаем функциональный канал для записи mWriteCharacter = new BluetoothGattCharacteristic( UUID.fromString(Constants.CHARACTERISTIC_WRITEABLE), BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_WRITE | BluetoothGattCharacteristic.PERMISSION_READ); // Создаем канал функции для чтения mReadCharacter = new BluetoothGattCharacteristic( UUID.fromString(Constants.CHARACTERISTIC_READABLE), BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_READ, BluetoothGattCharacteristic.PERMISSION_WRITE | BluetoothGattCharacteristic.PERMISSION_READ); // Создаем сервис Gatt mGattService = new BluetoothGattService( UUID.fromString(Constants.GATT_SERVICE_PRIMARY), BluetoothGattService.SERVICE_TYPE_PRIMARY); // Добавляем каналы чтения и записи mGattService.addCharacteristic(mWriteCharacter); mGattService.addCharacteristic(mReadCharacter); // Добавить услугу if (mGattServer != null && mGattService != null) mGattServer.addService(mGattService);
Открытая трансляция
После успешного включения трансляции центральное устройство может сканировать ваше устройство.Конечно, предполагается, что центральное устройство поддерживает два устройства и сканирует их.
Центральное устройство может получать всю информацию о вашем устройстве, включая GattService и его BluetoothGattCharacteristic.
public void startAdvertising() < // Обратный вызов здесь - это обратный вызов для успешного запуска mBluetoothLeAdvertiser.startAdvertising(createAdvSettings(true, 0), createAdvertiseData(), mAdvCallback); >private AdvertiseSettings createAdvSettings(boolean connectable, int timeoutMillis) < AdvertiseSettings.Builder builder = new AdvertiseSettings.Builder(); // Устанавливаем широковещательный режим, связанный с потреблением энергии builder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED); builder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); builder.setConnectable(connectable); builder.setTimeout(timeoutMillis); return builder.build(); >// Устанавливаем широковещательные данные (могут нести широковещательные данные, здесь не переносятся) private AdvertiseData createAdvertiseData()
Широковещательный обратный вызов
// Отправляем широковещательный обратный вызов private AdvertiseCallback mAdvCallback = new AdvertiseCallback() < public void onStartSuccess(AdvertiseSettings settingsInEffect) < mOnCallBackListener.advertisingStatus(true); if (settingsInEffect != null) < LogUtil.e("onStartSuccess TxPowerLv=" + settingsInEffect.getTxPowerLevel() + " mode=" + settingsInEffect.getMode() + " timeout=" + settingsInEffect.getTimeout()); >else < LogUtil.e("onStartSuccess, settingInEffect is null"); >> public void onStartFailure(int errorCode) < mOnCallBackListener.advertisingStatus(false); LogUtil.e("onStartFailure errorCode=" + errorCode); >>;
Обратный вызов службы Gatt
private class PeriServerCallBack extends BluetoothGattServerCallback < // При успешном добавлении GattService он перезвонит, чтобы изменить интерфейс. @Override public void onServiceAdded(int status, BluetoothGattService service) < if (status == BluetoothGatt.GATT_SUCCESS) < LogUtil.e("onServiceAdded status=GATT_SUCCESS service=" + service.getUuid().toString()); >else < LogUtil.e("onServiceAdded status!=GATT_SUCCESS"); >> // Интерфейс обратного вызова после изменения статуса соединения BLE @Override public void onConnectionStateChange(android.bluetooth.BluetoothDevice device, int status, int newState) < mClientDevice = device; LogUtil.e ("Статус изменения статуса BLE-соединения status =" + status + "->" + newState + "==== Address:" + device.getAddress ()); > // Интерфейс обратного вызова, когда есть клиент для чтения данных @Override public void onCharacteristicReadRequest(android.bluetooth.BluetoothDevice device, int requestId, int offset, BluetoothGattCharacteristic characteristic) < mClientDevice = device; LogUtil.e ("Клиент читает данные requestId =" + requestId + "offset =" + offset); mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue()); >// Интерфейс обратного вызова, когда есть клиент для записи данных @Override public void onCharacteristicWriteRequest(android.bluetooth.BluetoothDevice device, int requestId, BluetoothGattCharacteristic characteristic, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) < mClientDevice = device; try < String msg = new String(value, "UTF-8"); mOnCallBackListener.writeRequest(msg); LogUtil.e ("Данные записи клиента + сообщение =" + сообщение + "requestId =" + requestId + "offset =" + смещение); >catch (UnsupportedEncodingException e) < e.printStackTrace(); >// Для ответа необходимо sendResponse (конкретная причина не ясна, похоже, чтобы сохранить соединение) mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, null); > // Интерфейс обратного вызова, когда есть клиент для записи дескриптора @Override public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) < mClientDevice = device; LogUtil.e("onDescriptorWriteRequest === "); // now tell the connected device that this was all successfull mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, value); >>
Выпишите данные
В отличие от метода записи центрального устройства, периферийное устройство проходитnotifyCharacteristicChanged Метод, аналогичный методу уведомления для записи данных.
Конечно,sendResponse Также может использоваться для возврата данных.
public boolean write(byte[] value)
Как подключить Android к периферийному устройству Bluetooth
Чтобы установить соединение Bluetooth между вашим Android и другим устройством, например клавиатурой Bluetooth, выполните следующие действия:
- Убедитесь, что радиомодуль Bluetooth включен.
- Сделайте периферийное устройство Bluetooth доступным для обнаружения.
Включите гизмо и убедитесь, что его радио Bluetooth включено. Имейте в виду, что некоторые периферийные устройства Bluetooth имеют отдельные переключатели питания и Bluetooth. Если да, нажмите кнопку Bluetooth или выполните любое действие, необходимое для обнаружения периферийного устройства. - На Android откройте приложение «Настройки», чтобы получить доступ к экрану Bluetooth.
На экране Bluetooth отображаются уже сопряженные и доступные периферийные устройства, как показано на следующем рисунке. Если нет, нажмите кнопку «СКАНИРОВАТЬ» или нажмите «Переполнение действия» и выберите «Обновить». Если значок «Обновить» доступен и отображается на полях, коснитесь его. - Выберите периферийное устройство Bluetooth из списка.
- При необходимости введите пароль устройства или иным образом подтвердите соединение.
Например, с помощью клавиатуры Bluetooth вы можете увидеть на сенсорном экране подсказку с рядом цифр. Введите эти числа на клавиатуре и нажмите клавишу Enter или Return. Это действие завершает соединение.
После сопряжения устройства вы можете начать его использовать.
Подключенные устройства появятся в окне настроек Bluetooth под заголовком «Сопряженные устройства», как показано здесь.
- Периферийные устройства Bluetooth остаются подключенными независимо от того, выключаете ли вы Android, выключаете устройство или отключите радиомодуль Bluetooth. Подключение восстанавливается автоматически, когда вы снова включаете устройство.
- Да, ваш автомобиль может быть периферийным устройством Bluetooth, если в нем установлено радио Bluetooth. Таким образом, вы можете использовать телефон Android в режиме громкой связи во время вождения. Сопряжение телефона с автомобилем работает по-разному для каждого автомобиля, хотя общие шаги выполняются, как описано в этой главе. Имейте в виду, что автомобиль не будет работать в паре, пока он включен; остановить процесс сопряжения автомобиля.
- Чтобы перестать использовать устройство в течение длительного времени, необходимо разорвать пару с ним. Для этого перейдите на экран Bluetooth и коснитесь значка «Настройки» рядом с записью периферийного устройства. Нажмите кнопку ЗАБЫТЬ или действие Разорвать пару. Устройство не сопряжено.
- Разорвите пару только с теми устройствами, которые планируете никогда больше не использовать. В противном случае выключите устройство Bluetooth, когда закончите его использовать.
- Радиомодуль Bluetooth потребляет минимум энергии. Для Android это немного, но для периферийных устройств вполне может быть. Если вы не планируете какое-то время использовать периферийное устройство, выключите его.
Переферийное устройство Bluetooth
Всем привет. Не так давно столкнулся с такой проблемой. После передачи муз. файла с ноутбука на телефон через Bluetooth в диспетчере устройств в разделе другие устройства появились три желтых треугольника с восклицательным знаком, устройства обозначены как периферийные устройства Bluetooth, ОС. Windows 7, предполагаю, что проблема с драйверами, но не знаю как избавится. Буду благодарен за помощь.
Реклама
Регистрация 05.07.2011 Адрес Мытищи Сообщений 329 Репутация 10
Скорее всего, если возможность передавать/принимать файлы на ноуте никуда не делась, то в диспетчере устройств вы видите bluetooth-модуль телефона, с которым вы обменивались инфой и само собой на ноуте дров к нему быть не может. На истину в последней инстанции не претендую, но таково моё мнение.
Регистрация 22.10.2009 Адрес Russia Сообщений 4,486 Репутация 10
А на сам ноутбук ставили драйвера для блютуза?
Обычно они находятся на оф. сайте производителя ноутбука.
Сообщение от Rollo
А на сам ноутбук ставили драйвера для блютуза?
Обычно они находятся на оф. сайте производителя ноутбука.
Думаю, что драйвера установлены т.к. в диспетчере устройств в разделе радиомодули блютуз отображено два устройства:Generic Bluetooth Adapter и Microsoft Bluetooth Enumerator, и на против этих устройств никаких «треугольников» не отображается. Если я всё правильно понимаю.
Недавно столкнулся с проблемой этого рода.
Зайдя в Менеджер устройств, я увидел три новые неопределенные позиции.
Периферийное устройство Bluetooth.
Периферийное устройство Bluetooth.
Периферийное устройство Bluetooth.
Что делать? Драйвера на bt устройство стоят, но эти не определены!
Залазим через Everest в устройства и смотрим что гласит это устройство:
Зашел на сайт Asus’a (производитель), увидел там такую же тему на форуме поддержки, но, к сожалению, ребята из асуса решили оставить без внимания данную проблему, и ответов в теме вообще не оказалось
Ответ был найден на Nokia’вском форуме!
Решение данной проблемы достаточно просто и элегантно!
Эти устройства, как оказалось далее – это телефон, подключенный через bluetooth.
Выйдите из PC SUite, если он у вас запущен. Обратите мнимание, чтобы он не был минимизирован в трее!
Открываем: Панель управления\Оборудование и звук\Устройства и принтеры
или: control panel – bluetooth devices
ищем там свой телефон и удаляем.
Можем проверить, пропали ли наши неопределенные, неизвестные перифирифные устройства Bluetooth.
Следующим шагом – запускаем PC Suite – Настройка – Менеджер подключений, отмечаем галочкой блютуз, выделяем его и нажимаем Настроить(гаечный ключик слева в углу).
Проходим шаг за шагом мастер подключений, и подключаем телефон.
После данной процедуры, компьютер установит правильные драйвера для вашего устройства и все будет работать.
Это все, всем спасибо за внимание. Оставляем комменты, тем более если вам помогла статья. Я всегда рад получить новость о том, что мой пост кому-то помог.