QR a čárové kódy jsou dnes standardem v tisíci různých odvětví, stejně jako aplikace, které s nimi pracují. Co ale dělat, když běžný telefon nesplňuje požadavky na výdrž, odolnost nebo poskytované funkce? Řešením mohou být skenery od firmy Zebra.
Jedná se o různorodá proprietární zařízení s operačním systémem Android. Lze mezi nimi nebo vytvořit kombinaci hardwaru a softwaru pro každou situaci. Při vývoji je však potřeba počítat s jistými specifiky.
Design aplikace
Je pravda, že design obvykle není první slovo, které člověka napadne ve spojení s pracovní aplikací. Když tvoříte appku pro tyto skenery, je to ale první věc, kterou musíte brát v úvahu.
Zejména v případě, že budou používány někde v zastrčeném skladu. V dnešní době, kdy se výrobci telefonů předhánějí ve velikosti a rozlišení displeje, je totiž jednoduché zapomenout, že velká úhlopříčka nemusí představovat reálně využitelný prostor.
Rozlišení skenerů na nižším konci cenového spektra totiž odpovídá oslnivému MDPI. Ono je to logické – horší panel znamená úsporu při výrobě a menší spotřebu energie při provozu, ale zároveň bohužel posouvá design guidelines zpět do roku 2010.
DataWedge vs EMDK
Skenery Zebra umožňují aplikacím dva způsoby komunikace s hardwarem: DataWedge a Enterprise Mobility Developer Kit. Zatímco DataWedge umožňuje snadnější implementaci běžných situací, a tím zjednodušuje a zrychluje vývoj, při použití EMDK musí programátor ošetřit vše sám.
Totéž se každý dozví při otevření oficiální dokumentace k EMDK, kde hned první řádek odkazuje na výhody použití DataWedge.
Každá mince ale má dvě strany, což platí i v tomto případě. DataWedge sice umožňuje rychlý vývoj, ale uživatel (nebo správce zařízení) pak musí nastavit podpůrnou aplikaci, nad kterou vývojář nemá žádnou kontrolu. Kromě nutnosti nastavit každý skener se tak vytváří potenciální zdroj těžko debugovatelných problémů, zvláště pak v rukou zvídavého koncového uživatele.
Využití EMDK sice znamená více práce při vývoji, ale pro použití pak stačí pouze nainstalovat aplikaci. Navíc má vývojář plnou kontrolu nad tím, kdy a jaký kód bude akceptován – a pokud se něco pokazí, je jasné, kde je chyba. Z těchto důvodů jsme pro vývoj našich aplikací vybrali EMDK.
Volba je snad jasná... Nebo ne?
EMDK a jeho zvláštnosti
Jako každý software i EMDK prochází průběžným vývojem. Výběr správné verze je však poněkud složitější než najít aktuálně nejnovější. Jednotlivé verze EMDK totiž podporují různé verze Androidu, je tedy potřeba vědět, jestli klient neplánuje používat starší modely skenerů. V následujících ukázkách kódu bude použit EMDK verze 7.6.10.
Pokud má aplikace pracovat i na bežných telefonech nebo jiných zařízeních bez hardwarového skeneru čárových kódů, je potřeba vyřešit čtení těchto kódů pomocí fotoaparátu. EMDK však používá hardwarové ovladače pro kameru. Výsledek? Není možné zároveň přijímat kódy z kamery a hardwarového skeneru.
Dost řečí, pojďme se podívat na kód
V první řadě potřebujeme do manifestu přidat závislost na EMDK...
<uses-library android:name="com.symbol.emdk" />
...a přidat EMDK do gradle
compileOnly "com.symbol:emdk:7.6.10"
Pak můžeme získat referenci na EMDKManager...
EMDKManager.getEMDKManager(context, object : EMDKManager.EMDKListener {
override fun onOpened(emdkManager: EMDKManager?) {
//reference obtained, we can proceed with binding actual devices
initScanner((emdkManager?.getInstance(EMDKManager.FEATURE_TYPE.BARCODE) as? BarcodeManager) ?: return)
}
override fun onClosed() {
//clear all references, since manager is about to be destroyed
}
})
…a inicializovat samotný skener
fun initScanner(barcodeManager: BarcodeManager) {
barcodeManager.getDevice(BarcodeManager.DeviceIdentifier.DEFAULT)
?.apply {
addDataListener {
if (it.result == ScannerResults.SUCCESS) {
for (code in it.scanData) {
//do what you will with scanned code
}
}
}
addStatusListener {
if (it.state == StatusData.ScannerStates.IDLE && !isReadPending) {
read()
}
}
try {
enable() //start scanning immediately
} catch (e: Exception) {
//here we should handle cases like already running camera, that block the device from initializing
}
}
}
Jakmile máme referenci na skener, můžeme skenování přerušit pomocí metody disable() a znovu obnovit pomocí enable(), podobně jako při inicializaci. Když už scanner nepotřebujeme, je dobré referenci uvolnit
fun releaseScanner(it: Scanner) {
it.disable()
it.release()
}
Pokud chceme, aby aplikace fungovala i na běžných telefonech, pak musíme do manifestu přidat řádek
Máte se Zebrou své zkušenosti? Potěší nás vaše postřehy. Dejte nám vědět třeba na dactyláckém Facebooku. A pokud pro Zebry potřebujete aplikaci, nenechte se jimi nakopnout. Rádi vám s vývojem pomůžeme.
Článek připravil Vojta, náš senior Android developer.
Kontrolní otázka, co jsou cookies? Vyberte správnou odpověď.
Cookies nejsou sušenky, ale textové soubory
Chceme mít přehled, jak to na našem webu žije. Vy ale máte ve své moci, kolik se toho o vaší zdejší návštěvě dozvíme.
Jako vývojáře webů a aplikací nás zajímají analytická data, budeme proto vděční za váš souhlas.
Nastavení cookies
Vyberte vámi preferované povolení cookie, přičemž základní jsou nezbytné pro fungování, jiné můžeme používat jen s vaším souhlasem.
Vaše osobní údaje budou zpracovány a informace z vašeho zařízení (soubory cookie, jidinečné identifikátory a další údaje zařízená) mohou být uchovávány.
Svůj názor můžete vždy změnit a souhlas odvolat pomocí odkazu v patičce tohoto webu. Pro více informací o používání cookies prosím naštivte tuto stránku.