如何使用react-native-ble-manager获取可用蓝牙设备列表。
答案 0 :(得分:2)
我最近不得不使用这个库,这对我有用:
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);
}
编辑:不要忘记寻求位置的许可!
答案 1 :(得分:1)
首先你应该:
import BleManager from 'react-native-ble-manager';
并且不要忘记:
import { NativeAppEventEmittem } from 'react-native'
然后,在你的组件内部(我在componentDidMount
上):
2.1。在NativeAppEventEmitter
事件中将句柄添加到'BleManagerDiscoverPeripheral'
:
NativeAppEventEmitter.addListener('BleManagerDiscoverPeripheral',(data) =>
{
console.log(data)
});/*Name of peripheral device*/
2.2。启动BleManager管理器
BleManager.start({showAlert: false});`
2.3。 BleManager.scan([], 30)
其中第一个值是服务UUID的数组,第二个是秒扫描的运行时间
您可以在官方lib的页面react-native-ble-manager
上找到原始示例答案 2 :(得分:0)
要扫描附近的设备,请使用以下代码,
scanNearByDevices(serviceUUIDList, duration, isAllowDuplicates) {
bleManager
.scan(serviceUUIDList, duration, isAllowDuplicates)
.then(results => {
console.log('Scanning...');
// this.setState({scanning: true});
});
}
之后,使用下面的代码获取发现设备列表,
getDiscoverdDevices() {
return new Promise((resolve, reject) => {
bleManager
.getDiscoveredPeripherals()
.then(devices => {
console.log('Discovered devices:', devices);
this.deviceMap.set(device.id, device);
}
resolve(devices);
})
.catch(error => {
console.log('error fail: ', error);
reject(error);
});
});
}
如果您正在android上运行应用程序,请确保已为应用程序授予位置权限