import React from 'react'; import { Button, FlatList, PermissionsAndroid, Platform, Text, View } from 'react-native'; import { InterfaceType, StarDeviceDiscoveryManager, StarDeviceDiscoveryManagerFactory, StarPrinter } from 'react-native-star-print'; import CheckBox from '@react-native-community/checkbox'; interface AppProps { } interface AppState { lanIsEnabled: boolean; bluetoothIsEnabled: boolean; bluetoothLeIsEnabled: boolean; usbIsEnabled: boolean; printers: Array; } class App extends React.Component { private _manager?: StarDeviceDiscoveryManager; private _onPressDiscoveryButton = async() => { // If you are using Android 12 and targetSdkVersion is 31 or later, // you have to request Bluetooth permission (Nearby devices permission) to use the Bluetooth printer. // https://developer.android.com/about/versions/12/features/bluetooth-permissions if (Platform.OS == 'android' && 31 <= Platform.Version) { if (this.state.bluetoothIsEnabled) { var hasPermission = await this._confirmBluetoothPermission(); if (!hasPermission) { console.log(`PERMISSION ERROR: You have to allow Nearby devices to use the Bluetooth printer`); return; } } } this.setState({ printers: [], }); try { await this._manager?.stopDiscovery() var interfaceTypes: Array = [] if(this.state.lanIsEnabled) { interfaceTypes.push(InterfaceType.Lan); } if(this.state.bluetoothIsEnabled) { interfaceTypes.push(InterfaceType.Bluetooth); } if(this.state.bluetoothLeIsEnabled) { interfaceTypes.push(InterfaceType.BluetoothLE); } if(this.state.usbIsEnabled) { interfaceTypes.push(InterfaceType.Usb); } this._manager = await StarDeviceDiscoveryManagerFactory.create(interfaceTypes); this._manager.discoveryTime = 10000; this._manager.onPrinterFound = (printer: StarPrinter) => { const printers = this.state.printers; printers.push(printer); this.setState({ printers: printers }); console.log(`Found printer: ${printer.connectionSettings.identifier}.`); }; this._manager.onDiscoveryFinished = () => { console.log(`Discovery finished.`); }; await this._manager.startDiscovery(); } catch(error) { console.log(`Error: ${String(error)}`); } } private async _confirmBluetoothPermission(): Promise { var hasPermission = false; try { hasPermission = await PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT); if (!hasPermission) { const status = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT); hasPermission = status == PermissionsAndroid.RESULTS.GRANTED; } } catch (err) { console.warn(err); } return hasPermission; } constructor(props: any) { super(props); this.state = { lanIsEnabled: true, bluetoothIsEnabled: true, bluetoothLeIsEnabled: true, usbIsEnabled: true, printers: [], }; } render() { return ( Interface { this.setState({ lanIsEnabled: newValue }); }} /> LAN { this.setState({ bluetoothIsEnabled: newValue }); }} /> Bluetooth { this.setState({ bluetoothLeIsEnabled: newValue }); }} /> Bluetooth LE { this.setState({ usbIsEnabled: newValue }); }} /> USB