2015-06-08 142 views
2

我正在嘗試使用Meteor和此Cordova插件 - https://github.com/don/cordova-plugin-ble-central - 添加到我的項目中,使用meteor add cordova爲了連接到藍牙LE設備(TI Sensortag)。我想要做的就是在單擊鏈接時連接到設備並顯示消息。如何使用Meteor和Cordova BLE插件連接到BLE設備

我在我的模板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包中,或者有什麼方法可以讓插件有更多時間在成功或失敗回調之前響應?任何幫助將非常感激!

回答

5

對於任何有類似問題的人來說,這是爲我排序的。我將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.scan必須在調用ble.connect之前調用。 ble.scan導致Android代碼中的LinkedHashMap被填充了任何發現的設備。只有設備在LinkedHashMap中列出後,才能使用ble.connect連接到設備。