反应本机中的蓝牙

Bluetooth in react-native

我的项目需要接收和发送蓝牙信号,而我对 react-native 还很陌生,所以我可以在 react-native 中使用哪个组件来实现蓝牙相关功能?

更新(含免责声明)

自从我给出原来的答案后,情况发生了变化。在我的公司 (Polidea),由于我们意识到没有非常好的 BT React Native 库,我们开发并完全开源(许可)我们自己的解决方案。它基于两个基于 RX 的 Android 和 iOS 原生库,我们围绕它编写了一个通用的 React Native 包装器,以便您可以使用相同的 Javascript/RN 接口,但在原生 iOS/Android 细节在本机代码中处理。

图书馆在这里:https://github.com/Polidea/react-native-ble-plx

免责声明:我是一名首席软件工程师和前 CTO @Polidea - 创建该库的公司。

原回答:

我认为 RN 中没有用于蓝牙访问的内置组件。

如果你想使用蓝牙,你要么需要编写自己的 Obj-C API 组件(如 https://facebook.github.io/react-native/docs/native-modules-ios.html#content 所述),要么使用一些适合你需要的第三方组件已经有人做了。有几个可用(快速 google 搜索):

https://github.com/frostney/react-native-bluetooth-state

https://github.com/frostney/react-native-ibeacon

不确定它们是否运行良好,但如果您需要其他功能,可以将它们用作起点。

我创建了一个跨平台蓝牙/WIFI 框架,允许您以类似于 Apple 的 Multipeer Connectivity 和 Google 的 Nearby Connections 的方式浏览和宣传。它在 Android 和 iOS 之间工作,因此您可以将消息从 iOS 设备发送到 Android 设备,反之亦然。这是库的示例,可以在 https://github.com/alexkendall/RCTUnderdark

找到
import {
  NativeModules,
  NativeAppEventEmitter,
} from 'react-native';
import React from 'react';

var NativeManager = NativeModules.NetworkManager

module.exports = {
  // kind can be one of "WIFI", "BT", and "WIFI-BT"
  browse(kind) {
    NativeManager.browse(kind)
  },
  // kind can be one of "WIFI", "BT", and "WIFI-BT"
  advertise(kind) {
    NativeManager.advertise(kind)
  },
  stopAdvertising() {
    NativeManager.stopAdvertising()
  },
  stopBrowsing() {
    NativeManager.stopBrowsing()
  },
  disconnectFromPeer(peerId) {
    NativeManager.disconnectFromPeer(peerId)
  },
  inviteUser(peerId) {
    NativeManager.inviteUser(peerId)
  },
  sendMessage(message, peerId) {
    NativeManager.sendMessage(message, peerId)
  },
  acceptInvitation(peerId) {
    NativeManager.acceptInvitation(peerId)
  },
  getNearbyPeers(callback) {
    NativeManager.getNearbyPeers((peers) => {
      callback(peers)
    })
  },
  getConnectedPeers(callback) {
    NativeManager.getConnectedPeers((peers) => {
      callback(peers)
    })
  },
  /*listener callbacks
  peer contains .id (string), type(string), connected(bool), message(string), display name(string)
  */
  addPeerDetectedListener(callback) {
    NativeAppEventEmitter.addListener(
    'detectedUser',
    (peer) =>  callback(peer)
    );
  },
  addPeerLostListener(callback) {
    NativeAppEventEmitter.addListener(
    'lostUser',
    (peer) => callback(peer)
    );
  },
  addReceivedMessageListener(callback) {
    NativeAppEventEmitter.addListener(
      'messageReceived',
      (peer) => callback(peer)
    );
  },
  addInviteListener(callback) {
    NativeAppEventEmitter.addListener(
      'receivedInvitation',
      (peer) => callback(peer)
    );
  },
  addConnectedListener(callback) {
    NativeAppEventEmitter.addListener(
      'connectedToUser',
      (peer) => callback(peer)
    );
  },
}

检查一下这个包,它对我来说是一个真正的救星,并且适用于 iOS 和 Android。 React Native BLE Manager 您可以用它执行各种蓝牙活动:扫描、连接、发送、启用、禁用、断开连接等。您应该检查一下!