【问题标题】:Bluetooth in react-nativereact-native 中的蓝牙
【发布时间】:2015-08-27 05:34:26
【问题描述】:

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

【问题讨论】:

  • 你最终找到解决方案了吗?
  • 嘿 chapinkapa,不幸的是我没有用 RN 解决它,我在那个项目中使用 phonegap 代替。
  • 知道了,我现在正在尝试使用 swift 编写桥接器。祝你好运!

标签: bluetooth react-native


【解决方案1】:

更新(带有免责声明)

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

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

免责声明:我是首席软件工程师和前首席技术官@Polidea - 创建库的公司。

原答案:

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

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

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

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

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

【讨论】:

  • 我们为 BLE 创建了一个模块:github.com/innoveit/react-native-ble-manager
  • 我可以证明react-native-ble-plx 是一个设计精良且易于学习的库!干得好。
  • @Jarek Potiuk - 你的图书馆是否支持传统的 BT 设备(非 BLE)?
  • @pmont 我也有同样的问题。根据这个 Github 问题,它并且不会支持非 BLE 设备:github.com/Polidea/react-native-ble-plx/issues/70
  • 正确。据我所知,没有蓝牙经典的计划:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我创建了一个跨平台蓝牙/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)
        );
      },
    }
    

    【讨论】:

    • 您的库集成出现此错误:无法解析 io.underdark:underdark:1.+
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2021-09-03
    • 2021-09-16
    • 2018-05-29
    相关资源
    最近更新 更多