Android bluetooth extra device

1. Введение в BluetoothDevice

Этот класс реализует интерфейс Parcelable. Объекты класса, реализующего интерфейс Parcelable, могут быть инкапсулированы в объекты Parcel, а инкапсулированные данные могут быть переданы через Intent или IPC;

Ключевые моменты реализации интерфейса Parcelable :

Реализация метода writeTpParcl (): запись данных в объект Parcel;

public void writeToParcel(Parcel out, int arg1) < // TODO Auto-generated method stub out.writeBundle(this.mBundle); >

б) реализовать метод descriptionContents ():

public int describeContents() < // TODO Auto-generated method stub return 0; >

Внедрите интерфейс Parcelable.Creator:

public static final Parcelable.Creator CREATOR = new Parcelable.Creator() < public TrainInfo createFromParcel(Parcel in) < SampleBean ti=new SampleBean(); ti.mBundle=in.readBundle(); return ti; >public SampleBean[] newArray(int size) < return new SampleBean[size]; >>;

2. Введение

Объект BluetoothDevice представляет удаленное устройство Bluetooth.С помощью этого класса вы можете запрашивать физический адрес, имя, состояние соединения и другую информацию удаленного устройства;

Операции этого типа будут выполняться на оборудовании удаленного устройства Bluetooth.

Способ приобретения объекта:

А. Вызвать метод getRemoteDevice (address) BluetoothAdapter, чтобы получить соответствующий объект физического адреса;

Б. Вызвать метод getBoundedDevices () BluetoothAdapter, чтобы получить набор сопряженных Bluetooth-устройств;

3. Нужно разрешение

android.permission.BLUETOOTH : Разрешить программе подключаться к сопряженному устройству Bluetooth, запрашивать разрешение на подключение / получение подключения / передавать данные, необходимо изменить разрешения, в основном используемые для работы после сопряжения;

android.permission.BLUETOOTH_ADMIN : Позволяет программе обнаруживать и связывать устройства Bluetooth. Это разрешение используется для управления устройствами Bluetooth. С этим разрешением приложения могут использовать устройства Bluetooth устройства, главным образом для операций перед сопряжением;

Приоритет: разрешение BLUETOOTH является предпосылкой разрешения BLUETOOTH_ADMIN. Если у вас нет разрешения BLUETOOTH, вы не можете использовать разрешение BLUETOOTH_ADMIN;

Два API подробно

1. Введение в константы

Правила вещания : Вы можете угадать тип трансляции на основе имени трансляции. Если за константой имени трансляции следует ED, что в прошлом, то эту трансляцию необходимо зарегистрировать Полученная трансляция Например, ACTION_DISCOVERY_STARTED, это трансляция, которую устройство Bluetooth начинает искать;

Если имя константы вещания не заканчивается на ED, то это нормально Трансляция отправлена Например, Bluetooth открывает трансляцию: ACTION_REQUEST_ENABLE (Bluetooth доступен), ACTION_REQUEST_DISCOVERABLE (Bluetooth видимый);

Читайте также:  Not detecting bluetooth device

Низкоуровневые и высокоуровневые соединения : ACL-соединения — это низкоуровневые соединения, RFCOMM, L2CAP и другие соединения — высокоуровневые соединения, высокоуровневые соединения основаны на низкоуровневых соединениях;

(1) постоянная широковещательная связь, связанная с ACL-соединением

ACL соединение : Соединение является низкоуровневым, ACL-соединение автоматически управляется стеком Android Bluetooth;

String ACTION_ACL_CONNECTED : android.bluetooth.device.action.ACL_CONNECTED, Трансляция с ACL-соединением, установленным с удаленным устройством , Содержит дополнительный домен EXTRA_DEVICE, Этот дополнительный домен хранит объект BluetoothDevice и требует разрешения BLUETOOTH;

String ACTION_ACL_DISCONNECTED : android.bluetooth.device.action.ACL_DISCONNECTED, Трансляция после отключения ACL от удаленного устройства , Содержит дополнительный домен EXTRA_DEVICE, требует разрешения BLUETOOTH;

String ACTION_ACL_DISCONNECT_REQUESTED : android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED, нижний уровень выдает запрос на отключение, Соединение ACL собирается быть разъединенным ; Эта широковещательная рассылка будет отправлена, когда разорвано дружественное соединение. Когда должно разорваться соединение низкого уровня, соединение высокого уровня должно быть немедленно прервано; требуется разрешение BLUETOOTH;

(2) Другие широковещательные константы удаленных устройств

String ACTION_BOND_STATE_CHANGED : android.bluetooth.device.action.BOND_STATE_CHANGED, Эта трансляция отправляется при изменении состояния удаленного устройства Bluetooth Например, устройство соответствует, или не сопряжено; дополнительные поля, включенные в трансляцию: EXTRA_DEVICE, EXTRA_BOND_STATE, EXTRA_BOND_PREVIOUS_STATE; требуется разрешение BLUETOOTH;

String ACTION_CLASS_CHANGED : android.bluetooth.device.action.CLASS_CHANGED, один Трансляция при изменении статуса привязки удаленного устройства , Дополнительный домен широковещания имеет EXTRA_DEVICE, EXTRA_BOND_STATE; требуется разрешение BLUETOOTH;

String ACTION_FOUND : android.bluetooth.device.action.FOUND, Трансляция отправляется при обнаружении удаленного устройства ; Эта трансляция всегда содержит EXTRA_DEVICE, дополнительные поля EXTRA_CLASS, Если этот Bluetooth доступен, он также будет содержать дополнительные поля EXTRA_NAME, EXTRA_RSSI; требуется разрешение BLUETOOTH;

String ACTION_NAME_CHANGED : android.bluetooth.device.action.NAME_CHANGED, Обнаружено, что имя удаленного устройства Bluetooth изменено или широковещательная рассылка отправляется при первом обнаружении имени удаленного устройства Bluetooth , Трансляция содержит дополнительные домены EXTRA_DEVICE, дополнительные домены EXTRA_NAME; требуется разрешение BLUETOOTH;

(3) Постоянная состояния связывания

Связанный : int BOND_BONDED , Значение равно 12, удаленное устройство сопоставлено, общее подключение удаленного устройства хранится локально, и связь между локальным устройством и удаленным устройством может быть аутентифицирована и зашифрована, это соединение еще не успешно установлено, всегда сохраняйте статус соединения, это соединение В результате не требуется снова устанавливать новое соединение Bluetooth при следующем подключении;

переплет : int BOND_BONDING , Значение равно 11; локальное устройство и удаленное устройство совпадают;

Не соответствует : int BOND_NONE , Значение равно 10: локальное устройство не подключено к удаленному устройству, нет локального соединения с удаленным устройством, и связь между устройствами не может быть аутентифицирована и зашифрована;

(4) Дополнительная константа поля

Обязательное состояние : String EXTRA_BOND_STATE , int дополнительное поле, значение равно android.bluetooth.device.extra.BOND_STATE, это дополнительное поле является дополнительным полем ACTION_BOND_STATE_CHANGED, возможные значения BOND_BONDED, BOND_BONDING, BOND_NONE;

Читайте также:  Мистери mdd 7120s блютуз

Последнее связующее состояние : String ACTION_PREVIOUS_BOND_STATE , int дополнительный домен, в котором хранится состояние привязки удаленного устройства, значение равно «android.bluetooth.device.extra.PREVIOUS_BOND_STATE», Этот дополнительный домен является дополнительным доменом, транслируемым ACTION_BOND_STATE_CHANGED;

BluetoothClass : String EXTRA_CLASS , Parcelable дополнительный домен BluetoothClass, хранить объект BluetoothClass; значение равно android.bluetooth.device.extra.CLASS, Этот дополнительный домен ACTION_FOUND, ACTION_CLASS_CHANGED транслировать дополнительный домен;

BluetoothDevice : String EXTRA_DEVICE , Parcelable дополнительный домен BluetoothDevice, хранить объект BluetoothDevice, значение равно «android.bluetooth.device.extra.DEVICE», Почти у каждого вещания в этом классе есть этот дополнительный домен;

Имя Bluetooth : String EXTRA_NAME , Bluetooth имя дополнительного домена, сохранить имя Bluetooth, значение «android.bluetooth.device.extra.NAME», этот дополнительный домен ACTION_NAME_CHANGED, ACTION_FOUND транслировать дополнительный домен;

Сила сигнала : String EXTRA_RSSI Короткое целое дополнительное поле, в котором хранится значение уровня сигнала удаленного устройства; значение равно «android.bluetooth.device.extra.NAME»;

2. Введение в публичные методы

(1) Метод посылки

public void writeToParcel (Parcel out, int flags)

Параметры: out, целевой объект для инкапсуляции, флаги, дополнительные флаги о том, как записывается объект;

(2) Описание

public int describeContents ()

Функция: реализовать интерфейс Parcelable;

(2) Установите соединение BluetoothSocket

public BluetoothSocket createRfcommSocketToServiceRecord (UUID uuid)

Роль: создание объекта подключения BluetoothSocket, этот метод создает объект подключения BluetoothSocket и BluetoothAdapter Соединение BluetoothServerSocket, созданное методом listenUsingRfcommWithServiceRecord, соответствует вызывает метод connect () объекта BluetoothSocket для создания соединения и выполняет действие поиска SDP соответствующего канала через UUID;

Если вам нужно сгенерировать выделенный UUID для соединения между двумя телефонами Android, если вы подключаетесь к последовательному порту Bluetooth, используйте хорошо известный SPP UUID 00001101-0000-1000-8000-00805F9B34FB

Параметры: UUID, используемый для идентификации удаленного устройства Bluetooth, UUID используется для запроса служебной записи канала RFCOMM;

Возвращаемое значение: созданный объект подключения BluetoothSocket

(3) метод сравнения

public boolean equals (Object o)

Функция: сравните объект, вызывающий этот метод, с объектом o, если они равны, верните true, в противном случае верните false;

Параметры: объекты для сравнения

Возвращаемое значение: если два объекта равны, вернуть true, иначе вернуть false;

(4) Получить адрес Bluetooth

Функция: возвращает адрес Bluetooth устройства, этот адрес Bluetooth состоит из 17 цифр, и все буквы являются заглавными;

(5) Получить Bluetooth

public BluetoothClass getBluetoothClass ()

Функция: для получения класса Bluetooth удаленного устройства требуется разрешение BLUETOOTH. В случае возникновения ошибки верните ноль;

(6) Получить статус привязки устройства

Функция: Получить статус удаленного устройства, которое может быть одним из BOND_BONDED, BOND_BONDING, BOND_NONE;

(7) Получить Bluetooth-имя устройства

Функция: Получить имя удаленного устройства Bluetooth

(8) Получить хэш-значение

Функция: Получить значение хеша, вы можете переопределить этот метод

Читайте также:  Блютуз адаптер d link dbt 122

(9) Строковый метод

Источник

Как программно выполнить сопряжение устройства Bluetooth на Android

Для моего приложения я пытаюсь программно подключить Bluetooth-устройство. Я могу показать диалог сопряжения для устройства, которое я хочу установить, и я могу ввести pincode. Когда я нажимаю «Пара», диалог удаляется и ничего не происходит. Мне нужно только поддерживать устройства с Android 2.0 и новее. В настоящее время я использую следующий код для запуска процесса спаривания:

 public void pairDevice(BluetoothDevice device)

Я провел несколько дней в поисках решения этой проблемы. Похоже, что Google считает принудительное сопряжение проблемой безопасности, поэтому перечисленные здесь типы ДЕЙСТВИЙ на самом деле не существуют. я нашел класс, на который вы ссылаетесь здесь: developer.oesf.biz/em/developer/reference/cinnamon/android/… но его нет в официальных документах: developer.android.com/reference/android/bluetooth/…

Используя рефлексию, вы можете вызвать метод createBond из класса BluetoothDevice. Решение: см. Этот пост: Как программно отключить или удалить сопряженное устройство Bluetooth на Android ( stackoverflow.com/questions/9608140/… )? Существует также решение для несправедливости.

10 ответов

Мне удалось автоматически запросить процедуру сопряжения с клавиатурными устройствами через приложение, работающее как служба, проверяющее наличие определенного типа устройства и измененную версию приложения «Настройки».

Я должен сказать, что я работал над настраиваемым устройством под управлением Android 4.0.3 без внешних элементов управления (нет кнопок возврата/дома/подтверждения): соединение контроллера с загрузкой завершено без какого-либо взаимодействия до тех пор, пока запрос PIN не станет обязательным.

Сначала я создал службу, запускающую активность при загрузке (с android.intent.action.BOOT_COMPLETED и android.permission.RECEIVE_BOOT_COMPLETED) , которая периодически проверяет наличие устройства класса 1344 (клавиатура, единственный способ ввода данных по запросу) в обратном вызове onReceive:

public void onReceive(Context context, Intent intent) . BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); . if(dev.getBluetoothClass().getDeviceClass() == 1344)

После фильтрации я выбираю первую доступную клавиатуру, а затем передаю адрес BT в приложение «Настройки»:

Intent btSettingsIntent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS); btSettingsIntent.putExtra("btcontroller", dev.getAddress()); startActivityForResult(btSettingsIntent, 1); 

Сложная часть искала лучшую позицию для вызова процесса сопряжения. Используя только

intent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, PAIRING_VARIANT_PIN); 

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

Копаем в классы com.ndroid.settings.Bluetooth Я нашел свой путь через

createDevicePreference(CachedBluetoothDevice cachedDevice) 

в элементе DeviceListPreferenceFragment.

Оттуда я сравнил свой ранее выбранный адрес BT с теми, которые доступны, и один раз успешно совпадающий. Я вызываю

Я знаю, это сложно и требует доступа к исходному коду Android, но в пользовательской среде он работает.

Я надеюсь, что это может быть полезно.

Источник

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