amikor az Android-alapú eszköz USB host módban van, USB host-ként működik, táplálja a buszt, és felsorolja a csatlakoztatott USB-eszközöket. Az USB host mód az Android 3.1 vagy újabb verziójában támogatott.
API áttekintés
 mielőtt elkezdené, fontos megérteni azokat az osztályokat, amelyekkel együtt kell dolgoznia. Az alábbi táblázat a android.hardware.usb csomagban található USB host API-kat írja le.
1. táblázat., Az USB Host API-k
| Class | leírás | 
|---|---|
| UsbManager | lehetővé teszi a csatlakoztatott USB-eszközökkel való kommunikációt. | 
| UsbDevice | egy csatlakoztatott USB-eszközt jelent, amely azonosítási információinak, interfészeinek és végpontjainak elérésére szolgáló módszereket tartalmaz. | 
| UsbInterface | egy USB-eszköz interfészét jelenti, amely meghatározza az eszköz funkcionalitásának halmazát., A készüléknek lehet egy vagy több interfésze, amelyen kommunikálni lehet. | 
| UsbEndpoint | egy interfészvégpontot jelent, amely ezen interfész kommunikációs csatornája. Egy interfésznek lehet egy vagy több végpontja, általában bemeneti és kimeneti végpontjai vannak a készülékkel való kétirányú kommunikációhoz. | 
| UsbDeviceConnection | kapcsolatot jelent az eszközzel, amely végpontokon továbbítja az adatokat. Ez az osztály lehetővé teszi, hogy az adatokat előre-hátra sychronously vagy aszinkron módon küldje el., | 
| UsbRequest | egy aszinkron kérést jelent a UsbDeviceConnectioneszközzel való kommunikációra. | 
| UsbConstants | meghatározza az USB állandókat, amelyek megfelelnek a Linux/usb / ch9 definícióinak.h a Linux kernel. | 
a legtöbb esetben ezeket az osztályokat (UsbRequest csak akkor kell használni, ha aszinkron kommunikációt végez), amikor USB-eszközzel kommunikál., Általában a UsbManager értéket kapja a kívánt UsbDeviceletöltéséhez. Ha rendelkezik a készülékkel, meg kell találnia a megfelelő UsbInterface és a UsbEndpoint az adott interfészt. Miután megkapta a megfelelő végpontot, nyissa meg aUsbDeviceConnection az USB-eszközzel való kommunikációhoz.,
Android nyilvánvaló követelmények
Az alábbi lista bemutatja, mi kell hozzá, hogy az alkalmazás nyilvánvaló fájlt, mielőtt dolgozik az USB host Api-k:
- Mert nem minden Android-alapú készülékek garantált, hogy támogatja az USB host Api-k, tartalmaz egy <uses-feature>elem, amely kijelenti, hogy az alkalmazás aandroid.hardware.usb.hostfunkciót.
- állítsa az alkalmazás minimális SDK-jét 12 vagy újabb API szintre. Az USB host API-k nincsenek jelen a korábbi API szinteken.,
- ha azt szeretné, hogy az alkalmazás értesítést kapjon egy csatolt USB-eszközről, adjon meg egy <intent-filter>és<meta-data>elempárt aandroid.hardware.usb.action.USB_DEVICE_ATTACHEDfő tevékenységéhez. A<meta-data>elem egy külső XML erőforrás fájlra mutat, amely azonosítja az észlelni kívánt eszközre vonatkozó információkat.az XML erőforrás fájlban deklarálja a <usb-device>szűrni kívánt USB-eszközök elemeit. Az alábbi lista a<usb-device>attribútumait írja le., Általában használja a gyártó és a termékazonosítót, ha szűrni szeretne egy adott eszközhöz, és osztály, alosztály és protokollt szeretne használni, ha USB-eszközök egy csoportjára szeretne szűrni, például a háttértároló eszközökre vagy a digitális fényképezőgépekre. Megadhatja egyik vagy az összes ilyen attribútumok., A nem attribútumok megadása minden USB-eszközre vonatkozik, ezért csak akkor tegye ezt, ha az alkalmazás megköveteli:- vendor-id
 product-id
-  class
- 
protocol(eszköz vagy interfész)
subclass
 mentse az erőforrás fájlt a res/xml/könyvtárba. Az erőforrás fájl neve (nélkül .xml kiterjesztés) meg kell egyeznie a megadott <meta-data> elem. Az XML erőforrás fájl formátuma az alábbi példában található.,   
Nyilvánvaló, a forrás fájl példák
A következő példa azt mutatja be, egy minta nyilvánvaló, valamint a megfelelő erőforrás-fájl:
ebben az esetben a következő forrás fájlt menteni kell a res/xml/device_filter.xml adja meg, hogy bármilyen USB-eszközt a megadott attribútumok kell szűrni:
a Munka eszközök
Amikor a felhasználók csatlakoztassa az USB-eszközt, hogy egy Android-alapú készüléket, hogy az Android rendszer lehet meghatározni, hogy a kérelmet az érdekelt, hogy a csatlakoztatott eszköz. Ha igen, beállíthatja a kommunikációt az eszközzel, ha szükséges., Ehhez az alkalmazásnak a következőket kell tennie:
- fedezze fel a csatlakoztatott USB-eszközöket egy intent szűrő használatával, amelyet értesíteni kell, amikor a felhasználó USB-eszközt csatlakoztat, vagy felsorolja a már csatlakoztatott USB-eszközöket.
- kérje meg a felhasználót, hogy engedélyezze az USB-eszközhöz való csatlakozást, ha még nem kapta meg.
- kommunikáljon az USB-eszközzel úgy, hogy az adatokat a megfelelő interfészvégpontokon olvassa el és írja le.,
fedezzen fel egy eszközt
az alkalmazás felfedezheti az USB-eszközöket egy olyan szándékszűrő használatával, amelyet értesíteni kell, amikor a felhasználó csatlakoztat egy eszközt, vagy felsorolja a már csatlakoztatott USB-eszközöket. A szándékszűrő használata akkor hasznos, ha azt szeretné, hogy az alkalmazás automatikusan felismerje a kívánt eszközt. A csatlakoztatott USB-eszközök felsorolása akkor hasznos, ha az összes csatlakoztatott eszköz listáját szeretné megkapni, vagy ha az alkalmazás nem szűrte a szándékot.,
használjon szándékszűrőt
 ahhoz, hogy az alkalmazás felfedezzen egy adott USB-eszközt, megadhat egy szándékszűrőt a android.hardware.usb.action.USB_DEVICE_ATTACHED szándék szűréséhez. Ezzel a szándékszűrővel együtt meg kell adnia egy erőforrásfájlt, amely meghatározza az USB-eszköz tulajdonságait, például a termék-vagy szállítóazonosítót. Amikor a felhasználók olyan eszközt csatlakoztatnak, amely megfelel az eszközszűrőnek, a rendszer egy párbeszédpanellel mutatja be őket, amely megkérdezi, hogy el akarják-e indítani az alkalmazást. Ha a felhasználók elfogadják, az alkalmazás automatikusan jogosult az eszközhöz való hozzáférésre, amíg az eszköz le nincs választva.,
A következő példa azt mutatja be, hogyan állapítsa meg, hogy a szándék szűrő:
A következő példa azt mutatja be, hogyan állapítsa meg a megfelelő erőforrás-fájl, amely meghatározza, hogy az USB-eszköz, ami érdekel:
<?xml version="1.0" encoding="utf-8"?><resources> <usb-device vendor-id="1234" product-id="5678" /></resources>
a tevékenység, akkor kaphat a UsbDevice jelenti, hogy a csatlakoztatott eszköz a szándék, mint ez: 
Felsorolni eszközök
Ha a kérelmet az érdekelt felügyeleti az összes USB eszközt csatlakoztatott, amíg az alkalmazás fut, felsorolni eszközök a buszon., Használja a getDeviceList() módszert, hogy hash térképet kapjon az összes csatlakoztatott USB-eszközről. A hash térképet az USB-eszköz neve adja meg, ha eszközt szeretne beszerezni a térképről.
ha szükséges, akkor is csak szerezni egy iterátor a hash térkép és feldolgozza az egyes eszközök egyenként:
engedélyt szerezni kommunikálni egy eszköz
mielőtt kommunikál az USB eszköz, az alkalmazás engedélyével kell rendelkeznie a felhasználók.,
Megjegyzés: Ha az alkalmazás szándékszűrőt használ az USB-eszközök felfedezéséhez, amikor csatlakoztatva vannak, akkor automatikusan engedélyt kap, ha a felhasználó lehetővé teszi az alkalmazás számára a szándék kezelését. Ha nem, akkor engedélyt kell kérnie kifejezetten az alkalmazásban, mielőtt csatlakozna az eszközhöz.
az engedély kifejezett kérése szükség lehet bizonyos helyzetekben, például amikor az alkalmazás felsorolja a már csatlakoztatott USB-eszközöket, majd kommunikálni akar velük. Mielőtt megpróbálna kommunikálni vele, ellenőriznie kell az eszköz eléréséhez szükséges engedélyt., Ha nem, akkor futási hibát kap, ha a felhasználó megtagadta az eszköz eléréséhez szükséges engedélyt.
 az engedély kifejezett megszerzéséhez először hozzon létre egy sugárzott vevőt. Ez a vevő hallgatja a szándék, hogy lesz sugárzott, ha hívja requestPermission(). A requestPermission() hívás párbeszédpanelt jelenít meg a felhasználónak, amely engedélyt kér az eszközhöz való csatlakozáshoz., A következő minta kód megmutatja, hogyan kell létrehozni a broadcast receiver:
regisztrálni a broadcast receiver, add hozzá ezt a onCreate() módszer a tevékenység:
jelenítse meg a párbeszédpanel, hogy kéri a felhasználók engedélyét, hogy a csatlakozás után a készülék hívja a requestPermission() method:
Amikor a felhasználók a válasz, hogy a párbeszéd, a broadcast receiver kap a szándékkal, hogy tartalmazza a EXTRA_PERMISSION_GRANTED extra, ami egy logikai képviselő a választ. Mielőtt csatlakozna az eszközhöz, ellenőrizze ezt az extra értéket a true értéknél.,
kommunikálni egy eszköz
 kommunikáció egy USB eszköz lehet szinkron vagy aszinkron. Mindkét esetben létre kell hoznia egy új szálat, amelyen elvégezheti az összes adatátvitelt, így nem blokkolja a felhasználói felület menetét. Az eszközzel való kommunikáció megfelelő beállításához meg kell szereznie a megfelelő UsbInterface és UsbEndpoint azon eszköz megfelelő azonosítóját, amelyen kommunikálni szeretne, és a végpontra vonatkozó kéréseket egyUsbDeviceConnection., Általában a kódnak:
- ellenőrizze a UsbDeviceobjektum attribútumait, például a termékazonosítót, a szállítóazonosítót vagy az eszközosztályt annak megállapításához, hogy kommunikálni szeretne-e az eszközzel.
- ha biztos benne, hogy kommunikálni szeretne az eszközzel, keresse meg a megfelelő UsbInterface, amelyet a megfelelőUsbEndpoint– val kíván kommunikálni. Az interfészeknek egy vagy több végpontja lehet, és általában egy bemeneti és kimeneti végpontja lesz a kétirányú kommunikációhoz.,
- ha megtalálja a megfelelő végpontot, nyisson meg egy UsbDeviceConnectionértéket ezen a végponton.
- adja meg a végponton továbbítani kívánt adatokat a bulkTransfer()vagycontrolTransfer()módszerrel. Ezt a lépést egy másik szálban kell végrehajtania, hogy megakadályozza a fő UI szál blokkolását. További információ a szálak Android, lásd folyamatok és szálak.
a következő kódrészlet triviális módja a szinkron adatátvitelnek., A kód több a logika, hogy helyesen megtalálja a megfelelő interfész végpontok, hogy kommunikálni is kell tennie, bármilyen át adatokat egy másik szál, mint a fő UI szál:
ahhoz, Hogy adatot küldhessen aszinkron módon kerülhet sor, használja a UsbRequest osztály initialize vagy queue aszinkron kérés, akkor várni az eredményt requestWait().,
Ha befejezte a kommunikációt egy eszközzel, vagy ha az eszköz leválasztásra került, zárja be a UsbInterface és UsbDeviceConnection releaseInterface() és . A különálló események hallgatásához hozzon létre egy olyan műsorszóró vevőt, mint az alábbi:
az alkalmazáson belüli sugárzott vevőkészülék létrehozása, nem pedig a manifest, lehetővé teszi az alkalmazás számára, hogy csak különálló eseményeket kezeljen futás közben., Így a különálló események csak a jelenleg futó alkalmazáshoz kerülnek elküldésre, nem pedig az összes alkalmazáshoz.