Получение списка устройств USB из Android |
Добавил(а) microsin | |||||||
Общие принципы получения доступа к устройствам USB на платформе Android описаны в документации API [1]. В этой статье будет на практическом примере показано, как программно получить список подключенных устройств USB. Для того, чтобы можно было физически подключить к Android устройство USB (флешку, клавиатуру, мышку, или любое другое устройство USB HID или USB CDC) нужно иметь как минимум 2 вещи: 1. Современное устройство Android, у которого операционная система не старее Android 3.1.x (API Level 12 или выше). Более старые системы не поддерживают режим хоста USB, т. е. они принципиально не способны опознавать USB-устройства. На фото показан внешний вид такого переходника, который на ebay, dealextreme или aliexpress продается по цене порядка 2 долларов, или даже дешевле. Конечно, его можно купить также на рынке или в магазине, но несколько дороже. Дешевизна переходника легко объяснима - у него внутри ничего, кроме проводов, нет [2]. На переходнике с одной стороны имеется штеккер microUSB, который втыкается в Android, а на другой стороне стандартное гнездо USB type A, куда можно воткнуть любой шнур USB. Примеры программ Android, описанных в этой статье, можно скачать в архиве [3]. Программы были написаны в среде Eclipse, и испытывались на смартфоне Samsung Galaxy Note GT-N7000, версия Android 4.1.2 (API Level 16). [Как программно узнать, какие USB-устройства подключены к устройству Android] Для начала разберем, как получить список USB-устройств, подключенных к Android. 1. Создайте в Eclipse проект приложения Android при помощи стандартного мастера. На этом шаге выберите минимальную версию целевого SDK API 12. Target SDK и Compile With можете выставить по максимуму, на самую последнюю поддерживаемую версию Android. Так же задайте, как обычно, имя приложения, имя проекта и имя пакета. 2. Бросьте на форму приложения кнопку и виджет TextView. Кнопку будем использовать для запуска опроса устройств, а TextView для вывода информации. Создайте для них глобальные переменные в теле класса, и в обработчике onCreate сделайте привязку этих переменных к соответствующим ресурсам. Добавьте также глобальную переменную типа UsbManager: public class MainActivity extends Activity { TextView console; Button btn; UsbManager mUsbManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); console = (TextView)findViewById(R.id.txtconsole); console.setText(""); console.setMovementMethod(new ScrollingMovementMethod()); btn = (Button)findViewById(R.id.button1); } ... Для вывода в TextView создайте процедуру clog, принимающую строку. Для упрощения код процедуры не привожу, подробнее, как делать вывод в текстовый лог, можете посмотреть в FAQ [4], или загрузите готовый код в виде проекта Eclipse [3]. private void clog(String text); 3. Добавьте в манифест приложения секцию uses-feature android:name="android.hardware.usb.host". Вот пример файла манифеста: < ?xml version="1.0" encoding="utf-8"? > < manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.findusbdev" android:versionCode="1" android:versionName="1.0" > 4. Создайте обработчик клика на кнопке: public void btnClick(View v) { UsbDevice device; boolean nodevices = true; Программа готова. Вот пример её вывода, когда ничего не подключено, когда подключена флешка и когда подключено устройство USB HID (макетная плата AVR-USB-MEGA16). [Ссылки] 1. Android как хост USB. |