Класс UsbManager Печать
Добавил(а) microsin   

Класс UsbManager (находится в пакете android.hardware.usb.UsbManager) позволяет получить доступ к состоянию USB и в конечном итоге (через иерархию других классов) взаимодействовать с устройствами USB, подключенными к Android как к хосту USB. Класс UsbManager (как и другие классы для поддержки хоста USB) появились начиная с API Level 12. В публичном API в настоящее время поддерживается только режим хоста.

При доступе к устройствам USB обычно используется следующая цепочка использования классов (UsbManager является стартовой точкой взаимодействия с устройствами USB):

UsbManager -> UsbDevice -> UsbInterface -> UsbEndpoint -> UsbDeviceConnection

Вы можете получить экземпляр этого класса путем вызова Context.getSystemService().

UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);

Общую информацию по поддержке режимов Host и Accessory см. в [2].

[Обзор класса UsbManager]

Константы
String ACTION_USB_ACCESSORY_ATTACHED Broadcast Action: широковещательное сообщение о событии подключения аксессуара USB.
String ACTION_USB_ACCESSORY_DETACHED Broadcast Action: широковещательное сообщение о событии отключения аксессуара USB.
String ACTION_USB_DEVICE_ATTACHED Broadcast Action: широковещательное сообщение о событии подключения устройства USB.
String ACTION_USB_DEVICE_DETACHED Broadcast Action: широковещательное сообщение о событии отключения устройства USB.
String EXTRA_ACCESSORY Имя дополнения для широковещаний ACTION_USB_ACCESSORY_ATTACHED и ACTION_USB_ACCESSORY_DETACHED, содержащих объект UsbAccessory для аксессуара USB.
String EXTRA_DEVICE Имя дополнения для широковещаний ACTION_USB_DEVICE_ATTACHED и ACTION_USB_DEVICE_DETACHED, содержащих объект UsbDevice для устройства USB.
String EXTRA_PERMISSION_GRANTED Имя дополнения, добавляемого к PendingIntent, передаваемого в requestPermission(UsbDevice, PendingIntent) или requestPermission(UsbAccessory, PendingIntent), содержащих двоичное значение, показывающее - получено ли разрешение от пользователя на подключение к устройству, или нет.
Общедоступные (public) методы
UsbAccessory[] getAccessoryList()
Возвращает список подключенных в настоящее время аксессуаров USB. Этот метод не требует получения разрешения от пользователя для построения списка устройств.
HashMap<String, UsbDevice> getDeviceList()
Возвращает HashMap, содержащий все подключенные в настоящий момент устройства USB. Этот метод не требует получения разрешения от пользователя для построения списка устройств.
boolean hasPermission(UsbDevicedevice)
Возвращает true, если вызывающий код получил разрешение от пользователя на доступ к устройству USB.
boolean hasPermission(UsbAccessoryaccessory)
То же самое, но относится к аксессуару USB.
ParcelFileDescriptor openAccessory(UsbAccessoryaccessory)
Открывает дескриптор файла для чтения и записи данных в аксессуар USB.
UsbDeviceConnection openDevice(UsbDevicedevice)
Открывает устройство USB, после чего оно может использоваться для отправки и приема данных с помощью UsbRequest.
void requestPermission(UsbAccessory accessory, PendingIntentpi)
Запрашивает временное разрешение для указанного пакета на доступ к аксессуару USB.
void requestPermission(UsbDevice device, PendingIntentpi)
То же самое, но для устройства USB.

Примечание переводчика: в описании методов фигурируют некие аксессуары USB (UsbAccessory) и устройства USB (UsbDevice). Что же такое "аксессуар USB"? Оказывается, что аксессуар USB это тоже устройство USB, с той лишь разницей, что это устройство поддерживает специальный протокол аксессуаров Android (Android accessory protocol). Другими словами, аксессуар USB - это устройство Android, работающее в режиме специального устройства USB, поддерживающее Android accessory протокол.

[Константы UsbManager]

public static final String ACTION_USB_ACCESSORY_ATTACHED

Broadcast Action: широковещательное сообщение о событии подключения аксессуара USB. Этот intent отправляется, когда к Android в режиме хоста USB подключается аксессуар USB.

EXTRA_ACCESSORY содержит UsbAccessory для подключенного аксессуара

Значение константы: "android.hardware.usb.action.USB_ACCESSORY_ATTACHED"

public static final String ACTION_USB_ACCESSORY_DETACHED

Broadcast Action: широковещательное событие о отключении аксессуара USB. Этот intent отправляется, когда отключается аксессуар USB.

EXTRA_ACCESSORY содержит UsbAccessory для подключенного аксессуара, который был отключен

Значение константы: "android.hardware.usb.action.USB_ACCESSORY_DETACHED"

public static final String ACTION_USB_DEVICE_ATTACHED

Broadcast Action: то же самое, что и ACTION_USB_ACCESSORY_ATTACHED, только относится к устройству USB.

Значение константы: "android.hardware.usb.action.USB_DEVICE_ATTACHED"

public static final String ACTION_USB_DEVICE_DETACHED

Broadcast Action: то же самое, что и ACTION_USB_ACCESSORY_DETACHED, только относится к устройству USB. Этот intent отправляется, когда устройство USB от ключается от шины USB, и сам Android при этом находится в режиме хоста USB.

Значение константы: "android.hardware.usb.action.USB_DEVICE_DETACHED"

public static final String EXTRA_ACCESSORY

Имя дополнения для броадкастов ACTION_USB_ACCESSORY_ATTACHED и ACTION_USB_ACCESSORY_DETACHED, содержащего объект UsbAccessory для аксессуара.

Значение константы: "accessory"

public static final String EXTRA_DEVICE

Имя дополнения для броадкастов ACTION_USB_DEVICE_ATTACHED и ACTION_USB_DEVICE_DETACHED, содержащее объект UsbDevice для устройства.

Значение константы: "device"

public static final String EXTRA_PERMISSION_GRANTED

Имя дополнения к PendingIntent, передаваемого в requestPermission(UsbDevice, PendingIntent) или requestPermission(UsbAccessory, PendingIntent), содержащее величину boolean, означающее состояние получения разрешения на подключение к устройству - дано разрешение или нет.

Значение константы: "permission"

[Общедоступные (public) методы UsbManager]

public UsbAccessory[] getAccessoryList ()

Возвращает список подключенных в настоящее время аксессуаров USB (в текущей реализации в списке может быть самое большее 1 аксессуар).

Возвращает

список аксессуаров USB, или null, если ни одного аксессуара не подключено.

public HashMap<String, UsbDevice> getDeviceList ()

Возвращает HashMap, содержащую все устройства USB, подключенные в настоящее время. Имя устройства USB является ключевым в возвращаемой HashMap. Результат будет пуст, если нет подключенных устройств, или если режим хоста неактивен, или если режим хоста не поддерживается.

Возвращает
  • HashMap, содержащую все подключенные устройства USB.

public boolean hasPermission (UsbDevice device)

Возвратит true, если вызывающий код имеет разрешение на доступ к устройству. Разрешение может быть дано временно через requestPermission(UsbDevice, PendingIntent), или пользователем, выбравшим вызывающую программу в качестве приложения по умолчания для подключенного устройства (настраивается через элементы intent-filter файла AndroidManifest.xml).

Параметры
device устройство для проверки наличия разрешения
Возвращает
  • true, если вызывающий код получил разрешение

public boolean hasPermission (UsbAccessory accessory)

То же самое, только относится к аксессуару USB. Временно разрешение может быть получено через вызов requestPermission(UsbAccessory, PendingIntent) или пользователем, который выбрал вызывающую программу в качестве приложения по умолчанию для подключенного аксессуара.

Параметры
accessory аксессуар, у которого проверяется наличие разрешения на подключение
Возвращает
  • true, если вызывающий код имеет разрешение

public ParcelFileDescriptor openAccessory (UsbAccessory accessory)

Открывает дескриптор файла для чтения (и записи) данных из(в) аксессуара USB.

Параметры
accessory открываемый аксессуар USB
Возвращает
  • дескриптор файла, или null, если аксессуар нельзя открыть.

public UsbDeviceConnection openDevice (UsbDevice device)

Открывает устройство USB, так чтобы можно было передавать или принимать данные с использованием UsbRequest.

Параметры
device устройство для открытия
Возвращает
  • UsbDeviceConnection, или null, если открытие потерпело неудачу

public void requestPermission (UsbAccessory accessory, PendingIntent pi)

Запрашивает временное разрешение для указанного пакета на получение доступа к аксессуару USB. В результате может отобразиться диалог получения разрешения от пользователя, если ранее такое разрешение не было дано. Результат (успешный или нет) будет возвращен через PendingIntent pi. Если результат успешный, то это дает вызывающему коду разрешение на доступ к аксессуару до тех пор, пока аксессуар не будет отключен. К результату pi будут добавлены следующие дополнения:

EXTRA_ACCESSORY содержит аксессуар, переданный в этот вызов

EXTRA_PERMISSION_GRANTED содержит boolean, показывающий наличие предоставленного пользователем разрешения

Параметры
accessory аксессуар для получения разрешения
pi PendingIntent для возвращаемого результата

public void requestPermission (UsbDevice device, PendingIntent pi)

Запрашивает временное разрешение для указанного пакета на доступ к устройству USB. В результате может отобразиться диалог получения разрешения от пользователя, если ранее такое разрешение не было дано. Результат (успешный или нет) будет возвращен через PendingIntent pi. Если результат успешный, то это дает вызывающему коду разрешение на доступ к устройству до тех пор, пока оно не будет отключено. К результату pi будут добавлены следующие дополнения:

  • EXTRA_DEVICE содержит устройство, переданное в этот вызов
  • EXTRA_PERMISSION_GRANTED содержит boolean, показывающий наличие предоставленного пользователем разрешения
Параметры
device устройство USB для получения разрешения
pi PendingIntent для получения результата

[Ссылки]

1. UsbManager site:developer.android.com.
2. Android как USB хост и как USB устройство.