Класс 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]
Примечание переводчика: в описании методов фигурируют некие аксессуары 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
Значение константы: "accessory"
public static final String EXTRA_DEVICE
Значение константы: "device"
public static final String EXTRA_PERMISSION_GRANTED
Значение константы: "permission"
[Общедоступные (public) методы UsbManager]
Возвращает список подключенных в настоящее время аксессуаров USB (в текущей реализации в списке может быть самое большее 1 аксессуар).
Возвращает
список аксессуаров USB, или null, если ни одного аксессуара не подключено.
Возвращает 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, если вызывающий код имеет разрешение
Открывает дескриптор файла для чтения (и записи) данных из(в) аксессуара USB.
Параметры
accessory |
открываемый аксессуар USB |
Возвращает
- дескриптор файла, или null, если аксессуар нельзя открыть.
Открывает устройство USB, так чтобы можно было передавать или принимать данные с использованием UsbRequest .
Параметры
device |
устройство для открытия |
Запрашивает временное разрешение для указанного пакета на получение доступа к аксессуару USB. В результате может отобразиться диалог получения разрешения от пользователя, если ранее такое разрешение не было дано. Результат (успешный или нет) будет возвращен через PendingIntent pi. Если результат успешный, то это дает вызывающему коду разрешение на доступ к аксессуару до тех пор, пока аксессуар не будет отключен. К результату pi будут добавлены следующие дополнения:
EXTRA_ACCESSORY содержит аксессуар, переданный в этот вызов
EXTRA_PERMISSION_GRANTED содержит boolean, показывающий наличие предоставленного пользователем разрешения
Параметры
accessory |
аксессуар для получения разрешения |
pi |
PendingIntent для возвращаемого результата |
Запрашивает временное разрешение для указанного пакета на доступ к устройству USB. В результате может отобразиться диалог получения разрешения от пользователя, если ранее такое разрешение не было дано. Результат (успешный или нет) будет возвращен через PendingIntent pi. Если результат успешный, то это дает вызывающему коду разрешение на доступ к устройству до тех пор, пока оно не будет отключено. К результату pi будут добавлены следующие дополнения:
Параметры
device |
устройство USB для получения разрешения |
pi |
PendingIntent для получения результата |
[Ссылки]
1. UsbManager site:developer.android.com. 2. Android как USB хост и как USB устройство. |