我试图用流星这个科尔多瓦插件- https://github.com/don/cordova-plugin-ble-central -使用添加到我的项目meteor add cordova
,以便连接到蓝牙LE设备(TI Sensortag)。我首先要做的就是单击链接时,连接到设备并显示一条消息。
我的events
模板javascript部分中包含以下代码。
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 Connect事件正在触发,但随后未连接。我在两部不同的手机上调试时遇到相同的问题,并且使用的不是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.scan
必须在调用之前调用ble.connect
。该ble.scan
原因一个LinkedHashMap
在Android的代码与任何发现的设备来填充。只有在列出设备后,LinkedHashMap
您才能使用进行连接ble.connect
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句