首先你应该:
import BleManager from 'react-native-ble-manager';
Run Code Online (Sandbox Code Playgroud)
并且不要忘记:
import { NativeAppEventEmitter } from 'react-native'
Run Code Online (Sandbox Code Playgroud)然后,在您的组件内部(我正在做componentDidMount
):
2.1. NativeAppEventEmitter
在'BleManagerDiscoverPeripheral'
事件上添加句柄:
NativeAppEventEmitter.addListener('BleManagerDiscoverPeripheral',(data) =>
{
console.log(data) // Name of peripheral device
});
Run Code Online (Sandbox Code Playgroud)
2.2. 启动你的 BleManager 管理器:
BleManager.start({showAlert: false});
Run Code Online (Sandbox Code Playgroud)
2.3. BleManager.scan([], 30)
如果服务 UUID,第一个值是一个数组,第二个是扫描将运行多长时间的秒数
您可以在官方库的页面react-native-ble-manager上找到原始示例
我最近不得不使用这个库,这对我有用:
import { NativeModules, NativeEventEmitter } from 'react-native';
import BleManager from 'react-native-ble-manager';
const BleManagerModule = NativeModules.BleManager;
const bleManagerEmitter = new NativeEventEmitter(BleManagerModule);
...
state = {
peripherals: new Map(),
};
componentDidMount() {
BleManager.start({ showAlert: false })
this.handlerDiscover = bleManagerEmitter.addListener(
'BleManagerDiscoverPeripheral',
this.handleDiscoverPeripheral
);
this.handlerStop = bleManagerEmitter.addListener(
'BleManagerStopScan',
this.handleStopScan
);
this.scanForDevices(); // I chose to start scanning for devices here
}
scanForDevices() {
BleManager.scan([], 15);
}
handleDiscoverPeripheral = (peripheral) => {
const { peripherals } = this.state;
if (peripheral.name) {
peripherals.set(peripheral.id, peripheral.name);
}
this.setState({ peripherals });
};
handleStopScan = () => {
console.log('Scan is stopped. Devices: ', this.state.peripherals);
}
Run Code Online (Sandbox Code Playgroud)
编辑:不要忘记询问位置许可!