Обзор AndroidBluetooth API
Bluetooth API располагается в пакете android.bluetooth. В его состав входит несколько классов:
- BluetoothAdapter - отвечает за работу с установленным в телефоне Bluetooth модулем. Экземпляр этого класса есть в любой программе, использующей bluetooth. В состав этого класса входят методы, позволяющие производить поиск доступных устройств, запрашивать список подключенных устройств, создавать экземпляр класса BluetoothDevice на основании известного MAC адреса и создавать BluetoothServerSocket для ожидания запроса на соединение от других устройств.
- BluetoothDevice - класс, ассоциирующийся с удаленным Bluetooth устройством. Экземпляр этого класса используется для соединения через BluetoothSocket или для запроса информации об удаленном устройстве (имя, адресс, класс, состояние).
- BluetoothSocket - интерфейс для Bluetoothsocket, аналогичный TCP сокетам. Это точка соединения, позволяющая обмениваться данными с удаленным устройством через InputStream и OutputStream.
- BluetoothServerSocket - представляет открытый сокет сервера, готовый к обработке входящего запроса. Для того чтобы соединить два Android устройства, одно из них должно открыть сокет с помощью этого класса. Когда удаленное устройство пошлет запрос на соединение, BluetoothServerSocket вернет объект BluetoothSocket.
- BluetoothClass - описывает основные параметры Bluetooth модуля. Объект этого класса доступен только в режиме чтения и может быть полезен при определении типа устройства.
- BluetoothProfile - интерфейс, представляющий Bluetooth профиль (спецификацию беспроводного интерфейса для соединения устройств через Bluetooth). Примером профиля может служить Hands-Freeprofile, определяющий порядок работы с беспроводной гарнитурой.
- BluetoothHeadset - обеспечивает поддержку bluetooth гарнитур. Включает в себя профили BluetoothHeadset и Hands-Free (v1.5).
- BluetoothA2dp - Описывает AdvancedAudioDistributionProfile, определяющий передачу потока высококачественных аудиоданных через bluetooth.
- BluetoothHealth - определяет proxy для Health Device Profile.
- BluetoothHealthCallback - абстрактный класс, который можно использовать для реализации обратных вызовов от BluetoothHealth. Для того чтобы регистрировать изменение состояния Bluetooth устройства нужно на основе этого класса создать собственный и переопределить в нем callback методы.
- BluetoothHealthAppConfiguration - конфигурация, которая используется для соединения с различными медицинскими bluetooth устройствами.
- BluetoothProfile. ServiceListener - интерфейс, который посылает уведомление BluetoothProfileIPC клиентам при их подключении и отключении от сервиса.
В рамках этой статьи мы не будем углубляться в суть работы с медицинскими bluetooth устройствами и сосредоточимся на первых четырех классах.
|
Установка настроек Bluetooth адаптера из Android
Если Вы решили задействовать в своей программе возможности Bluetooth модуля, вам необходимо, прежде всего, подключить соответствующий пакет API.
importandroid.bluetooth.*;
Помимо этого необходимо дать приложению разрешение на использования Bluetooth модуля. Для этого в манифест программы нужно добавить строку
<uses-permissionandroid:name="android.permission.BLUETOOTH" />
Если Вы собираетесь использовать критические с точки зрения безопасности возможности, например, изменить имя устройства, то нужно дать более мощные разрешения BLUETOOTH_ADMIN:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
При использовании разрешения BLUETOOTH_ADMIN, необходимо также указывать и BLUETOOTH.
Прежде чем соединяться с кем-нибудь и передавать данные нужно убедиться, что ваш телефон имеет bluetooth модуль. Первым делом при работе с bluetooth API нужно создать экземпляр класса BluetoothAdapter
|
BluetoothAdapterbluetooth= BluetoothAdapter.getDefaultAdapter();
Если ваш телефон не поддерживает bluetooth, будет возвращено значение "null". На практике нужно всегда проверять это условие, чтобы избежать ошибок.
BluetoothAdapterbluetooth= BluetoothAdapter.getDefaultAdapter();
if(bluetooth!= null)
{
// СBluetooth все в порядке.
}
Даже если ваш аппарат оснащен Bluetooth модулем, он может быть недоступен, поскольку пользователь просто отключил его. Для проверки доступности Bluetooth служит метод isEnabled(). В случае, если модуль отключен, можно предложить пользователю включить его.
if (bluetooth.isEnabled()) {
// Bluetooth включен. Работаем.
}
else
{
// Bluetooth выключен. Предложим пользователю включить его.
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
Если пользователь согласился на включение адаптера, в переменную enableBtIntent будет записано значение RESULT_OK. В противном случае - RESULT_CANCELED.
После того, как все проверки выполнены, можно приступать к работе. Давайте, например, отобразим имя и адрес нашего адаптера, вызвав методы getName() и getAddress().
String status;
if(bluetooth.isEnabled()){
String mydeviceaddress= bluetooth.getAddress();
String mydevicename= bluetooth.getName();
status= mydevicename+": "+ mydeviceaddress;
}
else
{
status="Bluetooth выключен";
}
Toast.makeText(this, status, Toast.LENGTH_LONG).show();
Если приложение имеет разрешение BLUETOOTH_ADMIN, вы можете изменить имя Bluetooth устройства с помощью метода
bluetooth.setName("AndroidCoder");
для отображения состояния адаптера служит метод BluetoothAdapter.getState(). Этот метод может возвращать одно из следующих значений:
STATE_TURNING_ON
STATE_ON
STATE_TURNING_OFF
STATE_OFF
Часто в целях экономии заряда батареи Bluetooth выключен по умолчанию. Следующих код создает сообщение, в котором информирует пользователя о состоянии адаптера:
String state= bluetooth.getState();
status= mydevicename+ ”: ”+ mydeviceaddress+": "+ state;