ionic蓝牙用法

插件cordova官网cordova-plugin-ble-central

1.开启本机蓝牙android

ble.enable(
  function() {
    console.log("Bluetooth is enabled");
  },
  function() {
    console.log("The user did *not* enable Bluetooth");
  }
);ios

这方法是开启蓝牙功能的方法,在android上会弹出是否开启蓝牙的提示框,肯定会开启蓝牙功能,iOS上有提示,可是点击肯定也不会打开,好像是iOS的权限不容许,坑,数组

2.扫描蓝牙app

ble.scan([], 10, function (device) {//成功的回调函数
  $scope.devices = [];
  $scope.devices.push(device);
  $scope.$apply(function () {
    $scope.devices.push(device);
  });ionic

  return $scope.devices;
  }, function(){函数

    //失败的回调函数post

  }ui

);spa

蓝牙扫描的方法,第二个参数10指的扫描时间,单位是秒,device是扫描的设备插件

3.链接其余设备蓝牙

$scope.connectFun=function(device){

  ble.connect(device.id, $scope.onConnected, $scope.onError);

}

链接蓝牙的方法,第一个参数是你扫描到的设备的id,后面的是成功和失败的回调

4.读取数据

readCounter = setInterval(function () {
  ble.read(device.id, $scope.serviceUUID, $scope.counterCharacteristic, $scope.onDataReader, $scope.onReadError);
}, 1000);

读取已链接蓝牙的数据,我用了个定时器,1秒读一次,

device.id:蓝牙id,同第3的device.id

$scope.serviceUUID:蓝牙的UUID,具体不懂,每一个蓝牙都有,可是这个值须要注意的地方就是它在android和ios上的写法不同,好比在android上它的值是xxxxfff0-xxxx-xxxx-xxxx-xxxxxxxxxxx,那么它在ios上就是FFF0,这个能够用ionic.Platform.isAndroid()进行平台判断

$scope.counterCharacteristic:蓝牙的特性值,写法跟UUID相似,在android和ios的差别写法也跟UUID同样,刚开始我在android上写好功能后在iOS上连不上蓝牙问题就出在了这里

$scope.onDataReader:成功的回调,能够进行读取数据

$scope.onReadError:失败的回调

5.读取数据扩充

$scope.onDataReader=function(buffer){

  //buffer就是蓝牙读取的数据,可是须要转换才能被引用

  var data = new Uint8Array(buffer);//Uint8Array对象:8 位无符号整数值的类型化数组。内容将初始化为 0。若是没法分配请求数目的字节,则将引起异常。

  //这里能够一步步打印data而后按须要转出所需的数据

  //将值赋值给页面上绑定的变量时,若是变量没有变化,试着用

  $scope.$apply(function(){

    //将计算后的数据给变量赋值,要用$apply涉及到了ng的脏值检查机制,有兴趣能够去搜搜相关资料

  })

}

6.断开蓝牙

ble.disconnect(device.id, function(){
  //do something

}, function(){
  //do something
});

功能类似的话,记得断开后中止定时器

相关文章
相关标签/搜索