Русские Блоги
Стандарты Unicorn Enterprise Recruitment Python для инженеров 2019 года >>>
I. Базовые и связанные знания знаний
Во-первых, для работы Bluetooth, сначала добавьте разрешения в AndroidManifest.xml
uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> uses-permission android:name="android.permission.BLUETOOTH" />
Мы можем вызвать действие в пакете android.bluetooth.opp через намерение или напрямую вызвать пакет android.bluetooth, чтобы использовать функцию Bluetooth Android.
Метод заключается в следующем:
Что нам нужно сделать через пакет android.bluetooth.opp:
Intent enabler=new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enabler,reCode);//То же, что и startActivity (enabler);
Что нам нужно сделать с помощью пакета android.bluetooth:
Как следует из названия, адаптер Bluetooth будет продолжать работать до тех пор, пока мы не установим соединение bluetoothSocket. В BluetoothAdapter есть много методов, обычно используются следующие:
cancelDiscovery() //Согласно буквальному значению, это отменить обнаружение, то есть вызов этого метода, когда мы ищем устройство, не будет продолжать поиск disable() //Выключить Bluetooth enable() //Включить Bluetooth getAddress() //Получить локальный адрес Bluetooth getDefaultAdapter() //Получить BluetoothAdapter по умолчанию, на самом деле, есть только один способ получить BluetoothAdapter getName() //Получить локальное имя Bluetooth getRemoteDevice(String address) //Получить удаленное устройство Bluetooth на основе адреса Bluetooth getState() //Получить текущее состояние локального адаптера Bluetooth (ощущение более необходимо, когда возможна отладка) isDiscovering() //Определяет, выполняется ли в данный момент поиск устройства и возвращает true isEnabled() //Определяет, включен ли Bluetooth, возвращает true, если он включен, в противном случае возвращает false listenUsingRfcommWithServiceRecord(String name,UUID uuid) //Согласно названию, UUID создает и возвращает BluetoothServerSocket, что является первым шагом в создании сервера BluetoothSocket. startDiscovery() //Начните поиск, это первый шаг в поиске
Как видно из названия, этот класс описывает устройство Bluetooth
createRfcommSocketToServiceRecord(UUID uuid) // Создать и вернуть BluetoothSocket на основе UUID
Этот метод также является целью для нас, чтобы получить BluetoothDevice-создать BluetoothSocket
Другие методы этого класса, такие как getAddress (), getName (), такие же, как BluetoothAdapter
Если Bluetooth удален, я считаю, что все должны быть знакомы с ним. Так как это сокет, методы должны быть похожими. В этом классе есть только три метода.
Разница между двумя перегруженными accept () и accept (int timeout) заключается в том, что последний метод указывает устаревшее время. Следует отметить, что при выполнении двух методов клиентский запрос (или срок его действия истек) После) потоки будут заблокированы и должны быть запущены в новом потоке!
Еще одна вещь, на которую следует обратить внимание, это то, что оба метода возвращают BluetoothSocket, и последнее соединение также является соединением между сервером и двумя BluetoothSockets клиента. Close () закрывается!
В отличие от BluetoothServerSocket, это клиент. Всего 5 методов, без несчастных случаев
close() //близко connect() //соединение getInptuStream() //Получить входной поток getOutputStream() //Получить выходной поток getRemoteDevice() //Получить удаленное устройство, здесь относится к удаленному устройству Bluetooth, указанному в соединении bluetoothSocket
2, Android Bluetooth низкого уровня знаний
Стек протоколов Bluetooth для Android использует BlueZ, который поддерживает спецификации GAP, SDP и RFCOMM, и является SIG-сертифицированным стеком протоколов Bluetooth.
Bluez лицензируется по GPL, поэтому код bluez в платформе Android и пользовательском пространстве взаимодействуют через процесс обмена данными D-BUS, чтобы избежать проприетарного кода.
Спецификации Headset и Handsfree (v1.5) реализованы в платформе Android, которая тесно связана с приложением Phone. Эти спецификации также сертифицированы SIG.
На приведенной ниже схеме представлен ориентированный на библиотеку вид стека Bluetooth.
Сплошная рамка — это модуль Android, а красная пунктирная линия — это модуль, обозначенный партнером (примечание переводчика: предоставлено производителем микросхемы).
Следующая диаграмма представляет собой процессно-ориентированное представление:
BlueZ совместим с Bluetooth 2.1 и может работать с любыми чипами 2.1 и обратно совместимыми старыми версиями Bluetooth. Есть два аспекта:
Базовая подсистема BlueZ использует демон hciattach для добавления вашего конкретного драйвера последовательного оборудования.
Например, MSM7201A, этот файл находится в drivers / serial / msm_serial.c. Вам также нужно отредактировать параметры командной строки, изменив init.rc на hciattach.
Bluetooth включение / выключение
Методы выключателя питания чипа Bluetooth 1.0 и Post 1.0 отличаются следующим образом:
1.0: платформа Android записывает 0 или 1 в / sys / modules / board_ [PLATFORM] / parameters / bluetooth_power_on
Post 1.0: платформа Android использует linux rfkill API, см. Пример arch / arm / mach-msm / board-trout-rfkill.c.
Скомпилируйте Android и включите поддержку Bluetooth. Добавьте следующую строку в BoardConfig.mk.
Чтобы отладить реализацию Bluetooth, вы можете прочитать связанные с Bluetooth журналы (adb logcat) и искать ошибки и предупреждающие сообщения. Android использует Bluez и предоставляет несколько полезных инструментов отладки. Следующий фрагмент предназначен для предоставления предлагаемого примера:
1 hciconfig -a # print BT chipset address and features. Useful to check if you can communicate with your BT chipset. 2 hcidump -XVt # print live HCI UART traffic. 3 hcitool scan # scan for local devices. Useful to check if RX/TX works. 4 l2ping ADDRESS # ping another BT device. Useful to check if RX/TX works. 5 sdptool records ADDRESS # request the SDP records of another BT device.
Журналы демона для hcid (STDOUT) и hciattach (STDERR) по умолчанию записываются в / dev / null. Отредактируйте init.rc и init.PLATFORM.rc, чтобы запустить эти демоны в logwrapper и вывести их в logcat.
Если вы компилируете свой собственный system.img, hciconfig -a будет работать за исключением сканирования hcitool. Попробуйте установить прошивку на чип Bluetooth. XXX TBD
BlueZ предоставляет множество инструментов командной строки настройки для отладки и связи с подсистемой Bluetooth, включая следующие:
Во-вторых, основные категории обучения
Наследовать ContentProvider. Так называемый ContentProvider — это механизм предоставления данных, который используется, когда вы хотите предоставлять данные другим приложениям. BluetoothOppProvider предоставляет данные, связанные с настройками Bluetooth. Эпитоп данных btopp, элементы данных которого включают BluetoothShare._ID, BluetoothShare.URI, BluetoothShare.FILENAME_HINT, BluetoothShare._DATA, BluetoothShare.MIMETYPE, BluetoothShare.DIRECTION, BluetoothShare.DESTINATION, BluetoothShare.VISIBILITY, BluetoothShare.USER_CONFIRMATIONST , BluetoothShare.TOTAL_BYTES, BluetoothShare.CURRENT_BYTES, BluetoothShare.TIMESTAMP, Constants.MEDIA_SCANNED являются элементами данных с именами полей.
Наследуя BroadcastReceiver, так называемый BroadcastReceiver является базовым классом, который может принимать намерения, отправленные sendBroadcast (). BluetoothOppReceiver обрабатывает системные сообщения: Intent.ACTION_BOOT_COMPLETED, BluetoothAdapter.ACTION_STATE_CHANGED; сообщения от других приложений: BluetoothDevicePicker.ACTION_DEVICE_SELECTED, Constants.ACTION_INCOMING_FILE_CONFIRM; сообщения от уровня приложения: Constants.ACTION_OPEN, Constants.ACTION_LIST, Constants.ACTION_OPEN_OUTBOUND_TRANSFER, Constants.ACTION_OPEN_INBOUND_TRANSFER, Constants.ACTION_HIDE, Constants.ACTION_COMPLETE_HIDE.
Наследуя Сервис, так называемый Сервис — это механизм, который может работать в фоновом режиме системы и предоставлять сервисы другим приложениям. Каждый Сервис должен быть объявлен в AndroidManifest.xml. BluetoothOppService предоставляет фоновые сервисы Bluetooth, включая передачу файлов и прослушивание сообщений.
Предоставляет клиентскую функцию передачи объекта для BluetoothOppService и вызывает BluetoothOppObexClientSession для поддержки сеанса передачи.
Процесс создания наOPUSH(OBEX Object Push) ChanelПрослушайте сообщение сокета и перезвоните функции обратного вызова в BluetoothOppService для обработки.
Использование розеток для реализации процесса передачи только инкапсулировано и не имеет смысла.
Предоставляет функции передачи объекта на стороне сервера для BluetoothOppService.
Обеспечивает функциональность клиента передачи объекта для BluetoothOppService.
Структура пакета android.bluetooth.opp является примерно слоистой, как показано ниже. Классы в уровне взаимодействия пользовательского интерфейса в основном отвечают за отображение интерфейса и взаимодействие с пользователем. В частности, другие приложения вызывают намерение входа приложения bluetooth. Уровень логики транзакций в основном отвечает за приложения Bluetooth. Логика транзакций уровня (BluetoothOppManager и т. Д.) И обработка абстракции данных (BluetoothOppReceiveFileInfo), уровень поставщика услуг в основном обеспечивает вызовы инкапсуляции для базовых функций (BluetoothOppProvider) и служебных функций и констант (BluetoothOppUtility).
Что касается разработки в двух режимах, не должно быть файлов для изменения.