meteor - 如何使用 Meteor 和 Cordova BLE 插件连接到 BLE 设备

标签 meteor bluetooth-lowenergy cordova-plugins

我正在尝试使用 Meteor 和这个 Cordova 插件 - https://github.com/don/cordova-plugin-ble-central - 使用 meteor add cordova 添加到我的项目中,以便连接到蓝牙 LE 设备 (TI Sensortag)。我想做的就是,当单击链接时,连接到设备并显示一条消息。

我的模板 javascript 的 events 部分中有以下代码。

Template.measure.events({'click [data-action=scan-connect-stream]':
  function(event, template) {
    event.preventDefault();
    if (Meteor.isCordova) {
      Meteor.startup(function () {
          ble.connect('24:09:00:DE:00:42', 
                function(){
                    alert('Connect success');
                    return;
                }, 
                function(){
                    alert('Connect failed');
                    return;
                });
            });
        }
    }
});

我的问题是,有时代码可以工作,并且我会收到“连接成功”警报,但更多时候它无法连接并显示“连接失败”警报。在我在成功和失败回调中添加 return 语句之前,它根本不起作用。

我正在 Android 设备上对此进行调试 (meteor run android-device --verbose),并且可以通过 adb logcat 查看 Cordova 中的 BLE Con​​nect 事件插件正在触发,但随后无法连接。我在两部不同的手机上调试时遇到了同样的问题,并且在使用不是 TI Sensortag 的 BLE 设备时遇到了同样的问题,所以我猜测这是插件与 Meteor 交互方式的问题(也许 Meteor 等待的时间不够长)成功回调?)。

有没有人在 Meteor 中成功使用过这个插件,或者有人可以提供任何关于我做错了什么的线索吗?我应该尝试将其包装在 Meteor 包中,还是有什么方法可以让插件有更多时间在成功或失败回调触发之前做出响应?任何帮助将不胜感激!

最佳答案

对于任何遇到类似问题的人来说,这就是为我解决的问题。我将 ble.connect 调用放入 ble.scan 函数的成功回调中。不知道为什么,但先扫描几秒钟就可以了。

  Template.measure.events({
    'click [data-action=scan-connect-stream]': function(event, template) {
      event.preventDefault();
      if (Meteor.isCordova) {
        Meteor.startup(function () {
          device_id = '24:09:00:DE:00:42';
          ble.scan([], 5,
              function(peripherals){
                connectDevice(device_id);
              },
              function(){
                 alert('No devices found');
              }
            );
        });
      }
    }
  });


  var connectDevice = function (device_id) {
        ble.connect(device_id,
                        function(){
                          alert('Device ' + device_id + ' connnected');
                          },
                        function(){
                          alert('Couldn\'t connect to device ' + device_id);
                          });
  }

如果有人能解释为什么 ble.connect 无法单独工作,那就太好了!

编辑:查看Android代码,该插件的设计方式似乎是在调用ble.connect之前必须调用ble.scanble.scan 会导致 Android 代码中的 LinkedHashMap 填充任何已发现的设备。只有在 LinkedHashMap 中列出设备后,您才能使用 ble.connect 连接到它。

关于meteor - 如何使用 Meteor 和 Cordova BLE 插件连接到 BLE 设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707435/

相关文章:

node.js - 如何在服务器上使用 npm 时使方法响应

node.js - meteor 构建包没有响应

node.js - Meteor 多标签共享状态

cordova - 使用 cordova-plugin-file 时,chrome 中永远不会触发 filePluginIsReady 事件

ios - Cordova 媒体插件 seekTo 第一次不起作用

android - 用于将 keyUp 事件的键码传递给应用程序的 Cordova 插件

javascript - meteor cursor.map() : GOTCHA How do I extract just one element multiple times?

Android BLE,读写特性

android - 无法绑定(bind)服务(尝试总是返回 false)。为什么?

android - 蓝牙多连接