cordova-plugin-ble-central蓝牙插件地址
github地址:don/cordova-plugin-ble-central
文章目录
- 在蓝牙操作中遇到的问题:一定一开始(不管多紧急)就要立足于从根源上解决问题,长生久视
- 1.在安卓手机上,自动连接无效,反应太慢,在ios上体验很好
- 2.安卓手机进入后台,app这边不知什么时候断开了但是锁(蓝牙设备)那边没有断开,导致再进入app的时候无法搜到锁
- 3.ble.isConnected方法是异步的,如下,“test”会比"连接"先打印
- 4.自动重连在安卓上行不通,关闭蓝牙后再打开会导致搜不到原来连接的设备
- 5.在没有搜索的情况下,按id连接蓝牙设备是连不上的,自动重连可能需要断开状态下,蓝牙一直处于搜索状态
- 6.搜索到后点连接,是会在外设的第二个广播周期才会连接
- 7.停止扫描,开始扫描这样重复5次(大概)后,安卓会间隔10秒(大概)不允许你扫描
- 8.比较好的蓝牙调试app: nRF.Connect, 由nordic公司编写
- 9.广播里的kCBAdvDataLocalName字段和蓝牙名不一致的问题
- 10. OTA(ota)给蓝牙设备升级
- [11.cordova 蓝牙 因为android10位置权限,而导致蓝牙无法扫描的问题](https://xingxingyueliang.blog.csdn.net/article/details/111584245)
在蓝牙操作中遇到的问题:一定一开始(不管多紧急)就要立足于从根源上解决问题,长生久视
1.在安卓手机上,自动连接无效,反应太慢,在ios上体验很好
解决方案:放弃使用自动连接
2.安卓手机进入后台,app这边不知什么时候断开了但是锁(蓝牙设备)那边没有断开,导致再进入app的时候无法搜到锁
可能是我后面持有的是另外一个外设对象,并没有获取到原来的外设对象,原来的外设对象还是连接的
解决方案:在APP进入后台的时候主动断开蓝牙,当app再恢复到前台的时候再连接
3.ble.isConnected方法是异步的,如下,“test”会比"连接"先打印
ble.isConnected(currentMy.bleId,function(){
console.log("连接")
},function(){})
console.log("test")
4.自动重连在安卓上行不通,关闭蓝牙后再打开会导致搜不到原来连接的设备
function autoConnectMy(){
console.log("自动重连")
ble.isConnected(
currentMy.bleId,
function(){},
function(){
ble.connect(currentMy.bleId, function (data) {
if (testDebug) {
console.log("连接成功");
}
currentMy.bleId = data.id;
var textMy = data.name.substring(2)
currentMy.bleName = textMy;
receiveBlue();
var timer = setTimeout(function (time) {
sendBlueData(1);
clearTimeout(timer);
}, 100);
}, function (connectFail) {
if (testDebug) {
console.log("连接失败" + connectFail);
}
displayBlueCutConnect();
// autoConnectMy()
})
})
}
5.在没有搜索的情况下,按id连接蓝牙设备是连不上的,自动重连可能需要断开状态下,蓝牙一直处于搜索状态
android,不搜索,通过已知的mac地址可以生成外设对象,直接进行连接
6.搜索到后点连接,是会在外设的第二个广播周期才会连接
所以搜到后等200ms在调用连接的方法,不会有任何影响,因为外设的广播周期可能就有400~500ms
最好和外设的广播周期相匹配,比如广播周期是380ms,可能扫到后间隔300ms开始连接连上的概率会比较大。稳定的广播将是380ms的话,刚搜到的时候手机蓝牙助手上显示的可能是1110ms,然后变成700ms,然后变成380ms,比较稳定
7.停止扫描,开始扫描这样重复5次(大概)后,安卓会间隔10秒(大概)不允许你扫描
连续调用扫描,10次后才什么也收不出,所以一般不要调用停止扫描的方法
8.比较好的蓝牙调试app: nRF.Connect, 由nordic公司编写
cordova官网:cordova-plugin-ble-central - npm
相关博客:
ionic蓝牙插件(cordova-plugin-ble-central)
9.广播里的kCBAdvDataLocalName字段和蓝牙名不一致的问题
具体解决可以参考下面的博客:
ios 广播里的kCBAdvDataLocalName字段和蓝牙名不一致的问题
我发现其他的蓝牙调试的app都优先显示广播里的LocalName字段,没有这个字段的时候才显示蓝牙名