Kun Android-laitteessa on USB-host-tilassa, se toimii USB host, valtuudet linja, ja luettelee liitetyt USB-laitteet. USB-isäntätila on tuettu Android 3.1 ja korkeampi.
API Overview
ennen kuin aloitat, on tärkeää ymmärtää luokat, joiden kanssa sinun on työskenneltävä. Seuraavassa taulukossa kuvataan, USB host Api android.hardware.usb
paketti.
Taulukko 1., USB Host Api
Luokan | Kuvaus |
---|---|
UsbManager |
voit luetella ja kommunikoida kytketty USB-laitteita. |
UsbDevice |
On kytketty USB-laite ja sisältää menetelmiä käyttää sen tunnistetietoja, rajapinnat, ja päätepisteet. |
UsbInterface |
Edustaa liitäntä, USB-laite, jossa määritellään joukko toimintoja laitteen., Laitteessa voi olla yksi tai useampi rajapinta, jolla voi kommunikoida. |
UsbEndpoint |
Edustaa käyttöliittymän ominaisuutta, joka on viestinnän kanava, tämä käyttöliittymä. Käyttöliittymä voi olla yksi tai useampia päätepisteitä, ja yleensä on input ja output päätepisteet kaksisuuntainen kommunikointi laitteen kanssa. |
UsbDeviceConnection |
Muodostaa yhteyden laitteeseen, joka siirtää tiedot päätepisteet. Tämän luokan avulla voit lähettää tietoja edestakaisin sykronisesti tai asynkronisesti., |
UsbRequest |
Edustaa asynkronisen pyynnön kommunikoida laitteen kautta UsbDeviceConnection . |
UsbConstants |
Määrittelee USB vakioita, jotka vastaavat määritelmät linux/usb/ch9.H Linux-ytimen. |
useimmissa tilanteissa, sinun täytyy käyttää kaikki nämä luokat (UsbRequest
tarvitaan vain, jos olet tekemässä asynkroninen viestintä) kun kommunikoida USB-laitteen., Yleensä, voit hankkia UsbManager
hakea haluamasi UsbDevice
. Kun saat laitteen, sinun täytyy löytää sopiva UsbInterface
ja UsbEndpoint
että käyttöliittymä kommunikoida. Kun olet saanut oikean päätepisteen, avaa UsbDeviceConnection
kommunikoidaksesi USB-laitteen kanssa.,
Android manifest vaatimukset
seuraavassa luettelossa kerrotaan, mitä sinun täytyy lisätä sovelluksen manifest-tiedostoon, ennen kuin käytät USB host Api:
- Koska kaikki Android-pohjaisia laitteita ovat taatusti tukevat USB host Api, sisältää
<uses-feature>
elementti, joka ilmoittaa, että sovellus käyttääandroid.hardware.usb.host
ominaisuus. - Aseta sovelluksen VÄHIMMÄISSDK API-tasolle 12 tai korkeammalle. USB-isäntäapit eivät ole läsnä aiemmilla API-tasoilla.,
- Jos haluat hakemuksesi ilmoituksen liitteenä USB-laitteen, määritä
<intent-filter>
ja<meta-data>
elementti pariandroid.hardware.usb.action.USB_DEVICE_ATTACHED
tahallisuus teidän pääasiallinen toiminta.<meta-data>
elementti pistettä ulkoiseen XML resource file joka julistaa tunnistetietoja laite, jonka haluat tunnistaa.XML resource file, julistaa
<usb-device>
elementit USB-laitteet, jotka haluat suodattaa. Seuraava luettelo kuvaa<usb-device>
attribuutteja., Yleensä käyttää toimittajan ja tuotteen ID: n, jos haluat suodattaa tietyn laitteen ja käyttää luokan, alaluokan, ja pöytäkirjan jos haluat suodattaa ryhmän USB-laitteet, kuten mass storage-laitteet tai digitaaliset kamerat. Voit määrittää mitään tai kaikki nämä ominaisuudet., Täsmennetään ominaisuudet sopii jokaisen USB-laitteen, joten tee tämä vain, jos sovellus edellyttää sitä:vendor-id
product-id
class
subclass
-
protocol
(laite tai käyttöliittymä)
Tallenna resource file
res/xml/
hakemisto. Resurssitiedoston nimi (ilman .xml-laajennuksen) on oltava sama kuin<meta-data>
– elementissä määritelty. XML-resurssitiedoston muoto on alla olevassa esimerkissä.,
Manifest ja resource file esimerkkejä
seuraava esimerkki näyttää, näyte ilmeinen ja sen vastaava resource file:
tässä tapauksessa, seuraavat resource-tiedosto tulee tallentaa res/xml/device_filter.xml
ja täsmennetään, että mikä tahansa USB-laitteen, jossa on määritelty attribuutteja on suodatettava:
Työskennellä laitteita,
Kun käyttäjät kytke USB-laitteet Android-laitteen, Android-järjestelmä voi määrittää, onko sovellus on kiinnostunut kytketty laite. Jos näin on, voit asettaa yhteyden laitteeseen haluttaessa., Voit tehdä tämän, sinun sovellus on:
- Tutustu kytketty USB-laitteita käyttämällä intent-suodatin ilmoituksen, kun käyttäjä muodostaa yhteyden USB-laitteen tai luettelemalla USB-laitteet, jotka on jo yhdistetty.
- kysy käyttäjältä lupaa yhteyden muodostamiseen USB-laitteeseen, jos sitä ei ole jo saatu.
- kommunikoi USB-laitteen kanssa lukemalla ja kirjoittamalla tietoja sopivista rajapinnan päätepisteistä.,
Löydä laitetta,
sovellus voi löytää USB-laitteita joko käyttämällä intent-suodatin ilmoituksen, kun käyttäjä muodostaa yhteyden laitteen tai luettelemalla USB-laitteet, jotka on jo yhdistetty. Intent-suodattimen käyttäminen on hyödyllistä, jos haluat, että sovelluksesi havaitsee automaattisesti halutun laitteen. Liitettyjen USB-laitteiden luettelointi on hyödyllistä, jos haluat saada luettelon kaikista kytketyistä laitteista tai jos sovelluksesi ei suodattanut tarkoitusta varten.,
Käytä intent-suodatin
on sovellus löytää tietyn USB-laite, voit määrittää intent filter suodatin android.hardware.usb.action.USB_DEVICE_ATTACHED
tahallisuus. Yhdessä tämän intent filter, sinun täytyy määrittää resurssi tiedosto, joka määrittää ominaisuuksia USB-laitteen, kuten tuotteen ja toimittajan ID. Kun käyttäjät yhdistävät laitteen, joka vastaa laitteen suodatinta, järjestelmä esittää heille ikkunan, jossa kysytään, haluavatko he käynnistää sovelluksen. Jos käyttäjät hyväksyvät, sovelluksellasi on automaattisesti lupa käyttää laitetta, kunnes laite on irrotettu.,
seuraava esimerkki näyttää, miten julistaa intent filter:
seuraava esimerkki näyttää, miten julistaa vastaava resurssi tiedoston, joka määrittää USB-laitteet, jotka olet kiinnostunut:
<?xml version="1.0" encoding="utf-8"?><resources> <usb-device vendor-id="1234" product-id="5678" /></resources>
oman toiminnan, voit saada UsbDevice
, joka edustaa kiinnitetty laitteen tarkoitusta, kuten tämä:
Luetella laitteet
Jos hakemus on kiinnostunut tarkastaa kaikki USB-laitteet parhaillaan yhteydessä, kun sovellus on käynnissä, se voi luetella laitteiden bussissa., Käytä getDeviceList()
– menetelmää saadaksesi hash-kartan kaikista kytketyistä USB-laitteista. Hasiskartta näppäilee USB-laitteen nimen, jos haluaa hankkia laitteen kartalta.
Jos haluat, voit myös vain saada iteraattorin alkaen hash kartta ja prosessin jokaisen laitteen yksi kerrallaan:
Saada lupaa kommunikoida laitteen kanssa
Ennen kuin kommunikoida USB-laitteen, sovellus on oltava lupaa käyttäjille.,
Huomautus: Jos sovellus käyttää intent-suodatin löytää USB-laitteet, kun ne liitetään, se saa automaattisesti lupaa, jos käyttäjä sallii sovelluksen käsitellä tahallisuus. Jos ei, sinun on pyydettävä lupaa nimenomaisesti sovelluksessasi ennen liittämistä laitteeseen.
Nimenomaisesti pyytää lupaa voi olla tarpeen joissakin tilanteissa, kuten silloin, kun sovellus luetellaan USB-laitteita, jotka ovat jo kytketty ja sitten haluaa kommunikoida yksi. Sinun täytyy tarkistaa lupa käyttää laitetta ennen kuin yrität kommunikoida sen kanssa., Jos et, saat ajonaikaisen virheen, jos käyttäjä on kieltänyt pääsyn laitteeseen.
saadaksesi luvan, luo ensin lähetysvastaanotin. Tämä vastaanotin kuuntelee tarkoitus, että saa lähettää, kun soitat requestPermission()
. Puhelun requestPermission()
näyttää valintaikkuna käyttäjä pyytää lupaa muodostaa yhteys laitteeseen., Seuraava mallikoodi osoittaa, kuinka luoda broadcast vastaanotin:
Voit rekisteröidä radiovastaanotin, lisää tätä onCreate()
menetelmä teidän toiminta:
näyttää valintaikkunan, joka kysyy käyttäjien lupaa yhteyden laitteeseen, soita requestPermission()
menetelmä:
Kun käyttäjät vastata dialogi, broadcast vastaanotin vastaanottaa tahallisuus, joka sisältää EXTRA_PERMISSION_GRANTED
extra, joka on boolean edustava vastaus. Tarkista tämä ylimääräinen arvo totta ennen liittämistä laitteeseen.,
yhteydenpito laitteen kanssa
yhteydenpito USB-laitteen kanssa voi olla joko synkronista tai asynkronista. Kummassakin tapauksessa sinun pitäisi luoda uusi Lanka, jolla voit suorittaa kaikki tiedonsiirto, joten et estä UI-lankaa. Oikein perustettu viestintä-laitteen, sinun täytyy saada asianmukainen UsbInterface
ja UsbEndpoint
laitteen, jonka haluat kommunikoida ja lähettää pyyntöjä tätä ominaisuutta, jossa UsbDeviceConnection
., Yleensä koodi on:
- Tarkistaa
UsbDevice
objektin ominaisuuksia, kuten tuotteen TUNNUS, myyjän TUNNUS tai device class selvittää, onko tai et halua kommunikoida laitteen kanssa. - Kun olet varma, että haluat kommunikoida laitteen kanssa, löytää sopiva
UsbInterface
jota haluat käyttää kommunikoida yhdessä sopivaUsbEndpoint
sen käyttöliittymä. Rajapinnoilla voi olla yksi tai useampia päätepisteitä, ja niillä on yleisesti Tulo-ja tuloste-päätetapahtuma kaksisuuntaiseen viestintään., - Kun löydät oikean päätepisteen, avata
UsbDeviceConnection
tuota ominaisuutta. - Toimittavat tiedot, jotka haluat lähettää edelleen päätepisteen
bulkTransfer()
taicontrolTransfer()
menetelmä. Sinun pitäisi suorittaa tämä vaihe toisessa langassa, jotta estetään PÄÄKÄYTTÖLANGAN estäminen. Lisätietoja langojen käytöstä Androidissa on prosesseissa ja langoissa.
seuraava koodinpätkä on triviaali tapa tehdä synkroninen tiedonsiirto., Koodin pitäisi olla enemmän logiikkaa oikein löytää oikea käyttöliittymä ja päätepisteet, kommunikoida ja myös pitäisi tehdä siirtää tietoja eri lanka kuin tärkein UI lanka:
lähettää asynkronisesti, käytä UsbRequest
luokan initialize
ja queue
asynkroninen pyynnöstä, sitten odottaa tuloksen, jossa requestWait()
.,
Päättämisestä kommunikointi laitteen kanssa
Kun olet valmis kommunikoida laitteen kanssa tai jos laite on irrotettu, sulje UsbInterface
ja UsbDeviceConnection
soittamalla releaseInterface()
ja close()
. Kuuntelemaan, erillinen rakennus tapahtumia, luoda broadcast vastaanotin, kuten alla:
Luo lähetys-vastaanotin sovelluksen sisällä, ja ei ole ilmeinen, voidaan hakemus käsitellä vain irrottaa tapahtumia, kun se on käynnissä., Näin irralliset tapahtumat lähetetään vain käynnissä olevaan sovellukseen, eikä niitä lähetetä Kaikkiin sovelluksiin.