Bluetooth-android

Az Android platform a fejlesztők egy gazdag kommunikációs képességek. Együttműködik a Bluetooth funkciót az Android tartalmaz egy nagy teljesítményű API, amely könnyű, hogy átvizsgálja a környéket jelenlétére kész connect eszközök adatátviteli eszközök között, és így tovább.







Munka Bluetooth négy fázisból áll: a telepítés bluetooth adapter beállításainak megkeresi az elérhető eszközök csatlakoztatása, kapcsolat beállításához, adatátvitel.

Áttekintés Android Bluetooth API

Bluetooth API található paketeandroid.bluetooth. Ez áll több osztály:

Ebben a cikkben nem fogjuk ásni a lényege dolgozó orvosi bluetooth eszközöket, és elsősorban az első négy évfolyamon.

Telepítése a Bluetooth adaptert az Android beállításokat

Ha úgy dönt, hogy vegyenek részt a program modul Bluetooth képességekkel, meg kell először csatlakoztassa a megfelelő API csomagot.

Ezen túlmenően, annak szükségességét, hogy az alkalmazás engedélyt használni a Bluetooth modult. Ehhez adjunk hozzá egy sort a program kiáltványa

Ha szeretné használni a kritikus a biztonság szempontjából funkciók, mint például nevének megváltoztatásához a készüléket, akkor van szükség, hogy egy erősebb felbontás BLUETOOTH_ADMIN:

Felbontásban BLUETOOTH_ADMIN, meg kell adnia és a Bluetooth.

Még ha az eszköz támogatja a Bluetooth, akkor nem lesz elérhető, mert a felhasználó csak kikapcsolta. Ahhoz, hogy ellenőrizze a rendelkezésre álló Bluetooth isEnabled () metódust. Ha a készülék ki van kapcsolva, akkor figyelmezteti a felhasználót, hogy kapcsolja be.

Ha a felhasználó hozzájárul ahhoz, hogy felvételét az adaptert a változó értéke kerül rögzítésre enableBtIntent RESULT_OK. Ellenkező esetben - RESULT_CANCELED.

Ha az alkalmazás engedélyt BLUETOOTH_ADMIN, meg lehet változtatni a Bluetooth eszköz nevét módszerrel

BluetoothAdapter.getState () módszert alkalmazzák, hogy megjelenítse az állam az adapter. Ez a módszer visszatérhet az alábbi értékeket:

STATE_TURNING_ON
STATE_ON
STATE_TURNING_OFF
STATE_OFF

Gyakran előfordul, hogy az akkumulátor kímélése Bluetooth ki van kapcsolva alapból. A következő kód létrehoz egy üzenetet, hogy informálja a felhasználót a helyzetét az adapter:

Alkalmazottak keresés Bluetooth eszközöket

A BluetoothAdapter osztály, megtalálja a távoli bluetooth eszköz, fuss egy átkutat vagy kérjen listát a párosított eszközökkel.

Meg kell különböztetni a koncepció páros és a csatlakoztatott eszközök. A párosított készülékek csak tudni egymást, van egy link kulcs, hogy lehet használni a hitelesítéshez, és képesek létrehozni titkosított kapcsolatot egymással. United eszközök osztozik egy rádiócsatornát és továbbítja az adatokat egymással. A jelenlegi végrehajtási bluetooth API megköveteli, hogy a készülék párosítva a kapcsolat létrehozása előtt. (Párosítás automatikusan megtörténik, amikor elkezd egy titkosított kapcsolat Bluetooth API)

A csatlakozási kérelme a párosított eszköz

Eszközök keresése

A szkennelés megkezdéséhez rádióspektrum jelenléte a rendelkezésre álló eszközök egyszerűen hívja startDiscovery () metódust. Scanning zajlik egy külön aszinkron patak. A módszer visszaadja igaz, ha a vizsgálat induló sikeres volt. Jellemzően a szkennelési folyamat körülbelül 10-15 másodpercig. Ahhoz, hogy információt kapjon a megtalált eszközök, az alkalmazás regisztrálnia kell BroadcastReceiver szándék ACTION_FOUND. Ezt a szándékot nevezzük az egyes megtalált eszközöket. Szándék további mezőket tartalmaz és EXTRA_DEVICE EXTRA_CLASS, amelyek tárgyakat és BluetoothDevice BluetoothClass volt.

Kapcsolja be a Bluetooth az alkalmazás

Ha szeretne kapni értesítést, ha változik a láthatóságát a készülék, regisztráljon BroadcastReceiver szándék ACTION_SCAN_MODE_CHANGED. További mezők EXTRA_SCAN_MODE EXTRA_PREVIOUS_SCAN_MODE és tájékoztatást nyújt az új és a régi állapot, ill. Ők is igénybe vehet az értékeket SCAN_MODE_CONNECTABLE_DISCOVERABLE, SCAN_MODE_CONNECTABLE vagy SCAN_MODE_NONE. Az első érték azt jelzi, hogy az eszköz rendelkezésre áll a keresést. A második - az eszköz nem áll rendelkezésre kereső, de képes arra, hogy kapcsolatokat. A harmadik - nem kereshető, és nem tudja elfogadni kapcsolatokat.







eszköz vegyületet

Ha telepített egyikük jár, mint a szerver, hogy az, hogy folyamatosan nyitott BluetoothServerSocket. A cél a szerver -, hogy várjon egy kérelmet a bejövő kapcsolatot, és amikor bebizonyosodik, hogy hozzon létre BluetoothSocket. Ezután bezárhatja BluetoothServerSocket. Tekintsük szakaszos kapcsolatot eljárást a szempontból a szerver:

  1. Get BluetoothServerSocket hívó eljárás listenUsingRfcommWithServiceRecord (String, UUID). Az első paraméter a módszer egy leíró nevet a szolgáltatást. A rendszer automatikusan hozzáadja az adatbázishoz Service Discovery Protocol (SDP). Általában ez a paraméter csak jelzik az alkalmazás nevét. A második paraméter is meghatározza a szolgáltatás. Ez a paraméter az ügyfél, ha megerősíti a kapcsolatot.
  2. Első hallgatni csatlakozás kérés keresztül fogadja () metódust. Ez egy blokkoló módszer, amely olyan eredményt ad vissza, vagy ha a kapcsolat megerősítik, vagy ha kivétel történik. A vegyületet megerősítették, amikor a távoli egység küld egy csatlakozási kérelmet a UUID, a bejegyzésben meghatározott szerver socket. Ha sikeres, elfogadja () visszaad egy kapcsolat konfigurálva BluetoothSocket.
  3. Ha azt szeretnénk, hogy egy további kapcsolat, hívja a close () metódus. Ez vezet a kibocsátás az aljzat és minden erőforrás, de a kapcsolat zárt BluetoothSocket. Eltérően a TCP / IP, RFCOMM csak lehetővé teszi, hogy működjenek együtt egy ügyfél a csatornán, így a legtöbb esetben van értelme, hogy hívja a close () metódus beállítása után a szelet elfogadását aljzatba.

Mivel az accept () metódus van tiltva, akkor nem szükséges ahhoz, hogy a flow a fő tevékenység, mivel ez fog lógni a végtelenségig interfész. Általában, minden munkát BluetoothServerSocket és BluetoothSocket végre egy külön téma. A kilépéshez az elfogadó () metódus, hívja a close () metódus BluetoothServerSocket (vagy BluetoothSocket) bármely másik szál az alkalmazásban.

Az alábbiakban egy példa egy folyam munkagépek ismertetett mechanizmus fenti munkák

Ebben a példában azt feltételezzük, hogy csak az egyik lehet kapcsolatot létesíteni, és miután a kapcsolat megerősítette, és a kapott BluetoothSocket, az alkalmazás elküldi egyedi áram fedezi BluetoothServerSocket és ki a hurok.

Megjegyezzük, hogy ha elfogadják () függvény BluetoothSocket, a foglalat már csatlakoztatva van, így nem kell hívni a connect () metódust.

manageConnectedSocket () olyan eljárás, amellyel létre adatfolyam továbbítására. A bevezetésről lesz szó az alábbiakban.

Meg kell szüntetnie az BluetoothServerSocket után azonnal hallgat levegő jelenlétére bejövő kapcsolat. A példa módszerével szoros () nevezzük beérkezése után azonnal BluetoothSocket objektumot. Az is előfordulhat, hogy abba kell hagynia a nyilvános eljárás privát BluetoothSocket.

Inicializálni a kapcsolatot a távoli eszköz (olyan eszköz, amely megtartja a nyitott socket szerver) meg kell, hogy BluetoothDevice objektum, amely az információt róla. Ez az objektum használni ahhoz, hogy, és inicializálni BluetoothSocket vegyületet.

Bemutatjuk a kapcsolatot eljárás:

  1. Kapunk BluetoothSocket okozó BluetoothDevice.createRfcommSocketToServiceRecord (UUID) módszerrel. UUID paraméter értékét meg kell egyeznie a megadott érték a hívás szerver listenUsingRfcommWithServiceRecord.
  2. Inicializálása vegyületet hívó Connect () módszer. Ezután a metódus, akkor a rendszer egy SDP keresést a távoli eszközön feltérképezni a UUID. Ha sikeres, meg kell erősítenie kérést a szerver oldalon kell kinyitni RFCOMM csatornát. Ez egy blokkoló hívás. Ha valamilyen oknál fogva, a kapcsolat megszakad, és időtúllépés (körülbelül 12 másodperc), kivéve fog dobni.


Mivel abban az esetben fogadja el, csatlakoztassa () módszert kell végezni egy külön szál, különben podvisanie interfész előfordulhat.

Megjegyzés. Mielőtt hívja a connect (), győződjön meg róla, hogy abban a pillanatban nincs szkennelés elérhető eszközök kereséséhez. Abban az esetben, egyidejű végrehajtása ezeket a műveleteket, a kapcsolat jön létre sokkal lassabban, és azt kockáztatja, nem felel meg a timeout.

Itt egy példa kliens alkalmazás, hogy inicializálja a vegyület

A pásztázás leállítására éterrel okozott cancelDiscovery () módszer. Mielőtt hívja ezt a módszert lehet ellenőrizni, hogy van keresztül isDiscovering Scan ().

adatátvitel

Sikeres csatlakozás után minden csatlakoztatott eszköz rendelkezik BluetoothSocket tárgy, amely könnyen alkalmazható, a küldés / fogadás adatok:

  1. A getInputStream () és getOutputStream () Semi tárgyak InputStream és OutputStream, vezérlés átvitelre aljzatba.
  2. Olvasása és írása adatkezelési technikák alkalmazásával olvasni (byte []) és írási (byte []).

Ki kell használni egy külön téma, hogy írni és olvasni az adatokat. Ez azért fontos, mert a módszerek olvasni (byte []) és write (byte []) blokkolja, és hívja a fő áramlási megbéníthatja a program. A fő hurok a különböző áramlási kell olvasni az adatokat a InputStream. Ahhoz, hogy írjon az OutputStream értelme létrehozni egy külön állami módszerrel.

Fordítás: Alexander Ledkov
Forrás: developer.android.com