Периферийное устройство bluetooth android

Русские Блоги

Разработка периферийных устройств 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)

Источник

Читайте также:  Адаптер bluetooth rs 232

Как подключить Android к периферийному устройству Bluetooth

🚩 Не удалось подключиться к устройству bluetooth

Чтобы установить соединение Bluetooth между вашим Android и другим устройством, например клавиатурой Bluetooth, выполните следующие действия:

  1. Убедитесь, что радиомодуль Bluetooth включен.
  2. Сделайте периферийное устройство Bluetooth доступным для обнаружения.
    Включите гизмо и убедитесь, что его радио Bluetooth включено. Имейте в виду, что некоторые периферийные устройства Bluetooth имеют отдельные переключатели питания и Bluetooth. Если да, нажмите кнопку Bluetooth или выполните любое действие, необходимое для обнаружения периферийного устройства.
  3. На Android откройте приложение «Настройки», чтобы получить доступ к экрану Bluetooth.

    На экране Bluetooth отображаются уже сопряженные и доступные периферийные устройства, как показано на следующем рисунке. Если нет, нажмите кнопку «СКАНИРОВАТЬ» или нажмите «Переполнение действия» и выберите «Обновить». Если значок «Обновить» доступен и отображается на полях, коснитесь его.
  4. Выберите периферийное устройство Bluetooth из списка.
  5. При необходимости введите пароль устройства или иным образом подтвердите соединение.
    Например, с помощью клавиатуры Bluetooth вы можете увидеть на сенсорном экране подсказку с рядом цифр. Введите эти числа на клавиатуре и нажмите клавишу Enter или Return. Это действие завершает соединение.

После сопряжения устройства вы можете начать его использовать.

Подключенные устройства появятся в окне настроек Bluetooth под заголовком «Сопряженные устройства», как показано здесь.

  • Периферийные устройства Bluetooth остаются подключенными независимо от того, выключаете ли вы Android, выключаете устройство или отключите радиомодуль Bluetooth. Подключение восстанавливается автоматически, когда вы снова включаете устройство.
  • Да, ваш автомобиль может быть периферийным устройством Bluetooth, если в нем установлено радио Bluetooth. Таким образом, вы можете использовать телефон Android в режиме громкой связи во время вождения. Сопряжение телефона с автомобилем работает по-разному для каждого автомобиля, хотя общие шаги выполняются, как описано в этой главе. Имейте в виду, что автомобиль не будет работать в паре, пока он включен; остановить процесс сопряжения автомобиля.
Читайте также:  Версия bluetooth avrcp какую версию выбрать

  • Чтобы перестать использовать устройство в течение длительного времени, необходимо разорвать пару с ним. Для этого перейдите на экран Bluetooth и коснитесь значка «Настройки» рядом с записью периферийного устройства. Нажмите кнопку ЗАБЫТЬ или действие Разорвать пару. Устройство не сопряжено.
  • Разорвите пару только с теми устройствами, которые планируете никогда больше не использовать. В противном случае выключите устройство Bluetooth, когда закончите его использовать.
  • Радиомодуль Bluetooth потребляет минимум энергии. Для Android это немного, но для периферийных устройств вполне может быть. Если вы не планируете какое-то время использовать периферийное устройство, выключите его.

Источник

Переферийное устройство Bluetooth

Сообщение

Всем привет. Не так давно столкнулся с такой проблемой. После передачи муз. файла с ноутбука на телефон через Bluetooth в диспетчере устройств в разделе другие устройства появились три желтых треугольника с восклицательным знаком, устройства обозначены как периферийные устройства Bluetooth, ОС. Windows 7, предполагаю, что проблема с драйверами, но не знаю как избавится. Буду благодарен за помощь.

Реклама

Ratiborus вне форума

Регистрация 05.07.2011 Адрес Мытищи Сообщений 329 Репутация 10

Скорее всего, если возможность передавать/принимать файлы на ноуте никуда не делась, то в диспетчере устройств вы видите bluetooth-модуль телефона, с которым вы обменивались инфой и само собой на ноуте дров к нему быть не может. На истину в последней инстанции не претендую, но таково моё мнение.

Rollo вне форума

Регистрация 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 – Настройка – Менеджер подключений, отмечаем галочкой блютуз, выделяем его и нажимаем Настроить(гаечный ключик слева в углу).

Проходим шаг за шагом мастер подключений, и подключаем телефон.

После данной процедуры, компьютер установит правильные драйвера для вашего устройства и все будет работать.

Это все, всем спасибо за внимание. Оставляем комменты, тем более если вам помогла статья. Я всегда рад получить новость о том, что мой пост кому-то помог.

Источник

Оцените статью
Adblock
detector