--- sidebar_position: 4 --- # Scanner service The scanner service provides an implementation for barcode and QR code scanning. It follows a subscription pattern where the platform can start/stop scanning and listen for scanned codes. ## Registration ```javascript export default async context => { const listeners = []; context.service.addService({ type: 'scannerService', start: async () => { // Initialize your scanner hardware }, stop: async () => { // Release scanner resources }, onCodeScanned: callback => { listeners.push(callback); // Return a cleanup function to unsubscribe return () => { listeners.splice(listeners.indexOf(callback), 1); }; }, }); }; ``` ## Methods ### `start()` Called when the platform wants to activate the scanner. Use this to initialize your scanner hardware or begin listening for scan input. ### `stop()` Called when the platform wants to deactivate the scanner. Use this to release resources or stop listening for scan input. ### `onCodeScanned(callback)` Registers a listener that should be called whenever a code is scanned. The callback receives an object with a `code` property containing the scanned value. Returns a cleanup function that removes the listener when called. ## Dispatching scanned codes When your scanner hardware detects a code, notify all registered listeners: ```javascript function onScanDetected(code) { for (const listener of listeners) { listener({ code }); } } ```