Mobile App Development for Scanning & Inventory
We build mobile apps for scanning and inventory that replace paper spreadsheets and Excel. Our solutions use the smartphone camera or professional scanners to read barcodes, QR codes, and RFID tags. Unlike the traditional approach where inventory takes three days and is prone to human error, an automated app allows multiple employees to scan simultaneously, with data aggregated in a central database in real time.
The main challenges companies face during adoption: poor code readability in adverse conditions, lack of offline mode, and difficulty integrating with 1C and SAP. Experience shows that proper choice of stack (ML Kit, CameraX, Room, WorkManager) and architecture (MVVM with Clean Architecture) solves 90% of these problems. Average savings after deployment reach up to 1.5 million rubles per year for a warehouse with 5000 SKUs. We can evaluate your project – contact us for a consultation.
Why Smartphone Cameras Fail to Read Codes in the Warehouse?
Most frequent disappointment on first run: the smartphone camera struggles to read codes in real-world conditions. ML Kit Barcode Scanning by Google is a solid choice for Android: it supports EAN-13, EAN-8, Code 128, Code 39, QR, DataMatrix, PDF417, Aztec. But under poor lighting, glare on packaging, or damaged labels, recognition becomes unreliable.
Parameters that truly affect accuracy:
- Preview resolution:
CameraXwithResolutionSelector– minimum 1080p for small codes -
BarcodeScannerwithENABLE_ALL_POTENTIALSflag enabled – aggressive mode that finds partially occluded codes - Autofocus via
FocusMeteringActionon the central area – without explicit invocation, it may not work on budget devices
For industrial inventory, we use Zebra TC21/TC52 or Honeywell CT45. On these devices, the hardware laser scanner operates via DataWedge Intent API. The laser scanner processes up to 200 codes per minute, 5–7 times faster than a smartphone camera (20–30). In a warehouse, that makes a fundamental difference.
| Scanner Type | Throughput (codes/min) | Working Conditions | Recommendation |
|---|---|---|---|
| Smartphone Camera | 20–30 | Sensitive to light, glare | For occasional use |
| Laser Scanner (Zebra) | 150–200 | Robust to any conditions | For industrial warehouses |
| RFID Reader (Zebra RFD) | 300+ tags/sec | ±3 m range, no line-of-sight needed | For bulk inventory |
How Does Offline Mode Work in the Inventory App?
Dead Wi-Fi zones exist in any warehouse. Our architecture: Room for local storage of scanned items + WorkManager for background sync. The key challenge is conflict detection. If two employees scan the same item offline, it generates two local events. The server needs deduplication logic based on document_id + sku + timestamp.
For large inventories (50,000+ items), Room queries with filters require composite indexes: @Index(value = ["sku", "location_code"]) in the Entity – otherwise, filtering on two fields performs a full scan.
RFID Inventory
A separate story – RFID. Zebra RFD40/RFD90 readers connect to the smartphone via Zebra RFID SDK (Android). Session API example:
val rfidReader = RFIDReader(activity, readerName, null) rfidReader.connect() rfidReader.Events.setInventoryScanEvent(true) rfidReader.Events.addEventsListener(object : RfidEventsListener { override fun eventReadNotify(event: RfidReadEvents) { event.ReadEventData.tagData?.forEach { tag -> viewModel.onTagRead(tag.tagID, tag.peakRSSI) } } override fun eventStatusNotify(event: RfidStatusEvents) {} }) rfidReader.Actions.Inventory.perform() A single antenna reads up to 300 tags per second. Zone accuracy is ±3 meters, which must be accounted for when inventorying by storage cells. For a warehouse with 10,000 SKUs, annual savings exceed 3 million rubles.
How to Integrate Scanning into an App: Step-by-Step Guide
-
Add dependency in build.gradle:
implementation 'com.google.mlkit:barcode-scanning:17.2.0'. -
Create BarcodeScanner instance with options:
BarcodeScannerOptions.Builder().setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS).enableAllPotentialBarcodes().build(). - Set up CameraX with
PreviewViewand attachImageAnalysis.Analyzerto feed frames to the scanner. - Start scanning and process results in a callback:
scanner.process(image).addOnSuccessListener { barcodes -> ... }. - For offline mode, save results in Room and configure sync via WorkManager.
Inventory Process in the App
Typical flow: create an inventory document on the server → download to the app → scan by zones → compare with accounting data → record discrepancies → submit results.
Important: recounts. When a discrepancy is found, the warehouse operator must rescan the zone. The app should allow editing already entered items until the document is closed, but log all changes with a timestamp and user_id for audit.
Integration with Accounting Systems
Most WMS and ERP systems provide a REST API for inventory documents. 1C – via HTTP services extension. SAP – via OData or RFC. Non-standard systems – via CSV/Excel export on a schedule (slow but works).
| Integration Type | Speed | Complexity |
|---|---|---|
| REST API | High (seconds) | Medium |
| OData | Medium | High |
| CSV/Excel | Low (hours) | Low |
What’s Included in the Scanning App Development?
- Architectural documentation and API specification (OpenAPI)
- Source code for Android/iOS/Flutter with unit test coverage
- CI/CD setup for App Store and Google Play
- Store access and deployment guide
- Employee training on using the app
- Technical support and 6-month warranty
Timeline and Cost
Development timeline: a single-scan app with REST integration – 4–7 weeks. Full cycle with RFID, offline mode, and multiple integrations – 2–4 months. Cost is calculated after analyzing integration requirements and supported devices. Order a custom solution – we will find the optimal stack.







