import Activity from 'android.app.Activity'; import IntentFilter from 'android.content.IntentFilter'; import BroadcastReceiver from 'android.content.BroadcastReceiver'; import Context from 'android.content.Context'; import Intent from 'android.content.Intent'; import { OnScanReceiverCallback } from '../../interface.uts'; export default class ScanBroadcastReceiver { private static instance : ScanBroadcastReceiver = new ScanBroadcastReceiver(); private context : Context | null = null; private scanBroadcastReceiver: ChainwayScanBroadcastReceiver | null = null; private intentFilter: IntentFilter | null = null; private isOpenScan: boolean = false; private constructor() { } static getInstance(context : Context | null) : ScanBroadcastReceiver { ScanBroadcastReceiver.instance.context = context; return ScanBroadcastReceiver.instance; } registerReceiver(callback: OnScanReceiverCallback) { this.scanBroadcastReceiver = new ChainwayScanBroadcastReceiver(callback); if(this.isOpenScan == false) { this.isOpenScan = true; } this.intentFilter = new IntentFilter(); this.intentFilter!.addCategory(Intent.CATEGORY_DEFAULT); this.intentFilter!.addAction("com.infowedge.data"); UTSAndroid.getUniActivity()!.registerReceiver(this.scanBroadcastReceiver, this.intentFilter); } unregisterReceiver () { let uniActivity: Activity | null = UTSAndroid.getUniActivity(); if(this.scanBroadcastReceiver != null) { uniActivity!.unregisterReceiver(this.scanBroadcastReceiver); } //停止扫描 if (this.isOpenScan){ this.isOpenScan = false; } this.scanBroadcastReceiver = null; } } class ChainwayScanBroadcastReceiver extends BroadcastReceiver { private callback: OnScanReceiverCallback; constructor(callback: OnScanReceiverCallback) { super(); this.callback = callback; } override onReceive(context : Context, intent : Intent) { let action = intent.getAction(); if(action == "com.infowedge.data") { //let result = intent.getIntExtra("result", -1); //console.log("result: " + result); let data = intent.getStringExtra("data_string"); //let decode_data = intent.getByteArrayExtra("decode_data"); //console.log("decode_data: " + decode_data.toString()); //let symbol = intent.getIntExtra("symbology", -1); //console.log("symbol: " + symbol) //let time = intent.getIntExtra("decode_time", -1) //console.log("time: " + time + "ms"); if(data != null) { this.callback(data); } } } }