使用react-native-ble-manager获取可用蓝牙设备列表

时间:2016-08-02 16:27:47

标签: javascript bluetooth react-native bluetooth-lowenergy

如何使用react-native-ble-manager获取可用蓝牙设备列表。

3 个答案:

答案 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)

  1. 首先你应该:

    import BleManager from 'react-native-ble-manager';
    

    并且不要忘记:

    import { NativeAppEventEmittem } from 'react-native'
    
  2. 然后,在你的组件内部(我在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的数组,第二个是秒扫描的运行时间

  3. 您可以在官方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上运行应用程序,请确保已为应用程序授予位置权限