Ale*_*erg 5

  1. 首先你应该:

    import BleManager from 'react-native-ble-manager';
    
    Run Code Online (Sandbox Code Playgroud)

    并且不要忘记:

    import { NativeAppEventEmitter } from 'react-native'
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后,在您的组件内部(我正在做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上找到原始示例


den*_*sas 5

我最近不得不使用这个库,这对我有用:

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)

编辑:不要忘记询问位置许可!