|  |  |  | 
|---|
|  |  |  | import Vue from 'vue'; | 
|---|
|  |  |  | let main, Context, BManager, BluetoothAdapter, BAdapter, BluetoothDevice, IntentFilter; | 
|---|
|  |  |  | import {SET_INFODATA,SET_CONNECTBLEDATA} from '@/store/actionsType.js'; | 
|---|
|  |  |  | import {GET_CONNECTBLEDATA} from '@/store/gettersType.js'; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 蓝牙初始化和注册 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$init_bluetooth = function(){ | 
|---|
|  |  |  | console.log('蓝牙初始化'); | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | //获取android应用Activity活动对象 | 
|---|
|  |  |  | main = plus.android.runtimeMainActivity(); | 
|---|
|  |  |  | //引入Context类 | 
|---|
|  |  |  | Context = plus.android.importClass("android.content.Context"); | 
|---|
|  |  |  | // Context.BLUETOOTH_SERVICE  获取Context类的静态常量(蓝牙服务,获取BluetoothManager,以使用蓝牙) | 
|---|
|  |  |  | BManager = main.getSystemService(Context.BLUETOOTH_SERVICE); | 
|---|
|  |  |  | //获取蓝牙适配器对象类 | 
|---|
|  |  |  | BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"); | 
|---|
|  |  |  | //蓝牙本地适配器(对象) | 
|---|
|  |  |  | BAdapter = BluetoothAdapter.getDefaultAdapter(); | 
|---|
|  |  |  | //引入蓝牙设备类(创建与相应设备的连接或查询有关该设备的信息,例如名称,地址,类和绑定状态) | 
|---|
|  |  |  | BluetoothDevice = plus.android.importClass('android.bluetooth.BluetoothDevice'); | 
|---|
|  |  |  | //引入过滤器类 (IntentFilter可以匹配Intent中的动作,类别,数据) | 
|---|
|  |  |  | IntentFilter = plus.android.importClass('android.content.IntentFilter'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检查蓝牙是否开启 | 
|---|
|  |  |  | * 1.用户没有开启,提示开启 | 
|---|
|  |  |  | * 2.用户蓝牙已经开启 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$check_bluetooth_open = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * BAdapter.isEnabled(); 判断蓝牙是否打开 | 
|---|
|  |  |  | * BAdapter.enable();  //开启蓝牙 | 
|---|
|  |  |  | * BAdapter.disable();  //关闭蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | if (!BAdapter.isEnabled()) { | 
|---|
|  |  |  | //蓝牙未打开 | 
|---|
|  |  |  | uni.showModal({ | 
|---|
|  |  |  | title:"提示", | 
|---|
|  |  |  | content:"蓝牙未开启,是否开启蓝牙~", | 
|---|
|  |  |  | success:function(res){ | 
|---|
|  |  |  | if (res.confirm) { | 
|---|
|  |  |  | //开启蓝牙 | 
|---|
|  |  |  | BAdapter.enable(); | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | }else if(res.cancel){ | 
|---|
|  |  |  | resolve(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | // 后续提示框提示或用户手动打开 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //蓝牙已打开 | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检测手机是否已经连接蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$check_bluetooth_connect = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | // 先清空vuex原来已有的数据 | 
|---|
|  |  |  | _this.$store.dispatch(SET_CONNECTBLEDATA,[]); | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | // 获取android应用已配对的蓝牙设备类 | 
|---|
|  |  |  | let lists = BAdapter.getBondedDevices(); | 
|---|
|  |  |  | // 引入类 | 
|---|
|  |  |  | plus.android.importClass(lists); | 
|---|
|  |  |  | // 获取已配对蓝牙设备的个数 | 
|---|
|  |  |  | let len = lists.size(); | 
|---|
|  |  |  | // iterator()  把一个容器的所有对象,做成一个线性表(List),而iterator本身是一个指针 | 
|---|
|  |  |  | let iterator = lists.iterator(); | 
|---|
|  |  |  | // console.log(iterator.hasNext()); | 
|---|
|  |  |  | plus.android.importClass(iterator); | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * iterator.hasNext()  true如果迭代具有更多元素 | 
|---|
|  |  |  | * iterator.next() 放回迭代中的下一个元素 | 
|---|
|  |  |  | * iterator.remove() 从基础集合中移除此迭代器返回的最后一个元素(可选操作) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | while (iterator.hasNext()) { | 
|---|
|  |  |  | let d = iterator.next(); | 
|---|
|  |  |  | plus.android.importClass(d); | 
|---|
|  |  |  | let matchList = { | 
|---|
|  |  |  | name: d.getName(), | 
|---|
|  |  |  | mac: d.getAddress() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | console.log(matchList); | 
|---|
|  |  |  | _this.$store.dispatch(SET_CONNECTBLEDATA,matchList); | 
|---|
|  |  |  | resolve({code:true,msg:matchList}); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取一个已连接的设备 | 
|---|
|  |  |  | // plus.android.importClass(BManager); //引入相关的method函数 | 
|---|
|  |  |  | // //蓝牙适配器 | 
|---|
|  |  |  | // let BAdapter = BManager.getAdapter(); | 
|---|
|  |  |  | // // console.log(BAdapter); | 
|---|
|  |  |  | // plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna; | 
|---|
|  |  |  | // let lists = BAdapter.getBondedDevices(); | 
|---|
|  |  |  | // // console.log(lists); | 
|---|
|  |  |  | // plus.android.importClass(lists); | 
|---|
|  |  |  | // let iterator = lists.iterator(); | 
|---|
|  |  |  | // // console.log(iterator); | 
|---|
|  |  |  | // plus.android.importClass(iterator); | 
|---|
|  |  |  | // // console.log(iterator.hasNext()); | 
|---|
|  |  |  | // if(iterator.hasNext()){   //判断下一个元素的有无 | 
|---|
|  |  |  | //    let d = iterator.next(); | 
|---|
|  |  |  | //    plus.android.importClass(d); | 
|---|
|  |  |  | //    //已连接蓝牙的数据 | 
|---|
|  |  |  | //    // console.log(d.getAddress()); | 
|---|
|  |  |  | //    console.log(d.getAddress() + "----" + d.getName()); | 
|---|
|  |  |  | //    // _this.match_list = { | 
|---|
|  |  |  | //    //    name: d.getName(), | 
|---|
|  |  |  | //    //    mac: d.getAddress() | 
|---|
|  |  |  | //    // }; | 
|---|
|  |  |  | //    let matchList = { | 
|---|
|  |  |  | //       name: d.getName(), | 
|---|
|  |  |  | //       mac: d.getAddress() | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    _this.$store.dispatch(SET_CONNECTBLEDATA,matchList); | 
|---|
|  |  |  | //    // console.log(_this.$store.getters.GET_CONNECTBLEDATA) | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 连接打印机 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //     resolve({code:true,msg:matchList}); | 
|---|
|  |  |  | // }else{ | 
|---|
|  |  |  | //    resolve({code:false}) | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打开蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$open_bluetooth = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | if (!BAdapter.isEnabled()) { | 
|---|
|  |  |  | BAdapter.enable(); //启动蓝牙 | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已打开', | 
|---|
|  |  |  | duration: 3000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 关闭蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$close_bluetooth = function (){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | if (BAdapter.isEnabled()) { | 
|---|
|  |  |  | BAdapter.disable(); //关闭蓝牙 | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已关闭', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已关闭', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 搜索蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$search_bluetooth = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | let obj = {}; | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | // console.log(BAdapter.isEnabled()); | 
|---|
|  |  |  | // console.log(JSON.stringify(_this.$store.getters)); | 
|---|
|  |  |  | // BAdapter.isconnect("DC:1D:30:7C:74:96"); | 
|---|
|  |  |  | //判断蓝牙是否开启 | 
|---|
|  |  |  | if(!BAdapter.isEnabled()) { | 
|---|
|  |  |  | uni.showModal({ | 
|---|
|  |  |  | title:"提示", | 
|---|
|  |  |  | content:"蓝牙未开启,是否开启蓝牙~", | 
|---|
|  |  |  | success:function(res){ | 
|---|
|  |  |  | if (res.confirm) { | 
|---|
|  |  |  | console.log('用户点击确定'); | 
|---|
|  |  |  | obj.code = false;  //用户点击确定,开启蓝牙 | 
|---|
|  |  |  | obj.msg = "蓝牙未开启"; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | // _this.$open_bluetooth(); | 
|---|
|  |  |  | }else if(res.cancel){ | 
|---|
|  |  |  | // resolve() | 
|---|
|  |  |  | obj.code = null; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | obj.code = true; | 
|---|
|  |  |  | obj.msg = "开启搜索蓝牙"; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 监听蓝牙设备信息 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$search_pipei=function(){ | 
|---|
|  |  |  | let timer = null; | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | //提示蓝牙开启权限访问 | 
|---|
|  |  |  | uni.openBluetoothAdapter({ | 
|---|
|  |  |  | success(res) { | 
|---|
|  |  |  | if (res.errMsg === "openBluetoothAdapter:ok") { | 
|---|
|  |  |  | //这里是开启蓝牙搜寻 | 
|---|
|  |  |  | uni.startBluetoothDevicesDiscovery({ | 
|---|
|  |  |  | success: (res) => { | 
|---|
|  |  |  | console.log('startBluetoothDevicesDiscovery success', res) | 
|---|
|  |  |  | uni.showLoading({ | 
|---|
|  |  |  | title: "蓝牙搜索中...", | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | //每次搜索都把之前的清空 | 
|---|
|  |  |  | // _this.bArray = []; | 
|---|
|  |  |  | // _this.no_match_list = []; | 
|---|
|  |  |  | _this.$store.dispatch(SET_INFODATA,[]); | 
|---|
|  |  |  | let bArray = [];  //用于蓝牙去重 | 
|---|
|  |  |  | let filter = new IntentFilter();   //实例化过滤器类 | 
|---|
|  |  |  | let BDevice = new BluetoothDevice();  //实例化蓝牙设备类 | 
|---|
|  |  |  | // let connect = _this.$store.state.Bluetooth.connectBLEData; | 
|---|
|  |  |  | // console.log("已连接:" + JSON.stringify(connect)); | 
|---|
|  |  |  | BAdapter.startDiscovery(); //开启搜索 | 
|---|
|  |  |  | let receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', { | 
|---|
|  |  |  | onReceive: function(context, intent) { //回调 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | plus.android.importClass(intent); | 
|---|
|  |  |  | if (intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") { | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // Intent中获取设备对象 | 
|---|
|  |  |  | BDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); | 
|---|
|  |  |  | console.log(BDevice.getName() + "---" + BDevice.getAddress()); | 
|---|
|  |  |  | // 判断如果蓝牙没有名称则不显示 | 
|---|
|  |  |  | if (BDevice.getName() !== null) { | 
|---|
|  |  |  | //蓝牙去重 | 
|---|
|  |  |  | let address = BDevice.getAddress(); | 
|---|
|  |  |  | //已经连接的蓝牙 | 
|---|
|  |  |  | if(bArray.indexOf(address) == -1){ | 
|---|
|  |  |  | bArray.push(address); | 
|---|
|  |  |  | _this.$store.dispatch(SET_INFODATA,{ | 
|---|
|  |  |  | name: BDevice.getName(), | 
|---|
|  |  |  | mac: BDevice.getAddress() | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果intent为空则取消蓝牙监听 | 
|---|
|  |  |  | if (BDevice == null) { | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | uni.hideLoading() | 
|---|
|  |  |  | //获取已匹配的蓝牙 | 
|---|
|  |  |  | // that.bluetooth_list() | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(timer != null){ | 
|---|
|  |  |  | clearTimeout(timer); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | timer = setTimeout(()=>{ | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | uni.hideLoading(); | 
|---|
|  |  |  | },3000); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜寻错误~", | 
|---|
|  |  |  | duration: 3000, | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | filter.addAction(BDevice.ACTION_FOUND);   //可发现 | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED); | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);  //搜索结果 | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_STATE_CHANGED); | 
|---|
|  |  |  | main.registerReceiver(receiver, filter); //注册监听 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜寻失败~", | 
|---|
|  |  |  | duration: 3000, | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail(err) { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜索失败" | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | import Vue from 'vue'; | 
|---|
|  |  |  | let main, Context, BManager, BluetoothAdapter, BAdapter, BluetoothDevice, IntentFilter; | 
|---|
|  |  |  | import {SET_INFODATA,SET_CONNECTBLEDATA} from '@/store/actionsType.js'; | 
|---|
|  |  |  | import {GET_CONNECTBLEDATA} from '@/store/gettersType.js'; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 蓝牙初始化和注册 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$init_bluetooth = function(){ | 
|---|
|  |  |  | console.log('蓝牙初始化'); | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | //获取android应用Activity活动对象 | 
|---|
|  |  |  | main = plus.android.runtimeMainActivity(); | 
|---|
|  |  |  | //引入Context类 | 
|---|
|  |  |  | Context = plus.android.importClass("android.content.Context"); | 
|---|
|  |  |  | // Context.BLUETOOTH_SERVICE  获取Context类的静态常量(蓝牙服务,获取BluetoothManager,以使用蓝牙) | 
|---|
|  |  |  | BManager = main.getSystemService(Context.BLUETOOTH_SERVICE); | 
|---|
|  |  |  | //获取蓝牙适配器对象类 | 
|---|
|  |  |  | BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"); | 
|---|
|  |  |  | //蓝牙本地适配器(对象) | 
|---|
|  |  |  | BAdapter = BluetoothAdapter.getDefaultAdapter(); | 
|---|
|  |  |  | //引入蓝牙设备类(创建与相应设备的连接或查询有关该设备的信息,例如名称,地址,类和绑定状态) | 
|---|
|  |  |  | BluetoothDevice = plus.android.importClass('android.bluetooth.BluetoothDevice'); | 
|---|
|  |  |  | //引入过滤器类 (IntentFilter可以匹配Intent中的动作,类别,数据) | 
|---|
|  |  |  | IntentFilter = plus.android.importClass('android.content.IntentFilter'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检查蓝牙是否开启 | 
|---|
|  |  |  | * 1.用户没有开启,提示开启 | 
|---|
|  |  |  | * 2.用户蓝牙已经开启 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$check_bluetooth_open = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * BAdapter.isEnabled(); 判断蓝牙是否打开 | 
|---|
|  |  |  | * BAdapter.enable();  //开启蓝牙 | 
|---|
|  |  |  | * BAdapter.disable();  //关闭蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | if (!BAdapter.isEnabled()) { | 
|---|
|  |  |  | //蓝牙未打开 | 
|---|
|  |  |  | uni.showModal({ | 
|---|
|  |  |  | title:"提示", | 
|---|
|  |  |  | content:"蓝牙未开启,是否开启蓝牙~", | 
|---|
|  |  |  | success:function(res){ | 
|---|
|  |  |  | if (res.confirm) { | 
|---|
|  |  |  | //开启蓝牙 | 
|---|
|  |  |  | BAdapter.enable(); | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | }else if(res.cancel){ | 
|---|
|  |  |  | resolve(false); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | // 后续提示框提示或用户手动打开 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | //蓝牙已打开 | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 检测手机是否已经连接蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$check_bluetooth_connect = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | // 先清空vuex原来已有的数据 | 
|---|
|  |  |  | _this.$store.dispatch(SET_CONNECTBLEDATA,[]); | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | // 获取android应用已配对的蓝牙设备类 | 
|---|
|  |  |  | let lists = BAdapter.getBondedDevices(); | 
|---|
|  |  |  | // 引入类 | 
|---|
|  |  |  | plus.android.importClass(lists); | 
|---|
|  |  |  | // 获取已配对蓝牙设备的个数 | 
|---|
|  |  |  | let len = lists.size(); | 
|---|
|  |  |  | // iterator()  把一个容器的所有对象,做成一个线性表(List),而iterator本身是一个指针 | 
|---|
|  |  |  | let iterator = lists.iterator(); | 
|---|
|  |  |  | // console.log(iterator.hasNext()); | 
|---|
|  |  |  | plus.android.importClass(iterator); | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * iterator.hasNext()  true如果迭代具有更多元素 | 
|---|
|  |  |  | * iterator.next() 放回迭代中的下一个元素 | 
|---|
|  |  |  | * iterator.remove() 从基础集合中移除此迭代器返回的最后一个元素(可选操作) | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | while (iterator.hasNext()) { | 
|---|
|  |  |  | let d = iterator.next(); | 
|---|
|  |  |  | plus.android.importClass(d); | 
|---|
|  |  |  | let matchList = { | 
|---|
|  |  |  | name: d.getName(), | 
|---|
|  |  |  | mac: d.getAddress() | 
|---|
|  |  |  | } | 
|---|
|  |  |  | console.log(matchList); | 
|---|
|  |  |  | _this.$store.dispatch(SET_CONNECTBLEDATA,matchList); | 
|---|
|  |  |  | resolve({code:true,msg:matchList}); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //获取一个已连接的设备 | 
|---|
|  |  |  | // plus.android.importClass(BManager); //引入相关的method函数 | 
|---|
|  |  |  | // //蓝牙适配器 | 
|---|
|  |  |  | // let BAdapter = BManager.getAdapter(); | 
|---|
|  |  |  | // // console.log(BAdapter); | 
|---|
|  |  |  | // plus.android.importClass(BAdapter); //引入相关的method函数,这样之后才会有isEna; | 
|---|
|  |  |  | // let lists = BAdapter.getBondedDevices(); | 
|---|
|  |  |  | // // console.log(lists); | 
|---|
|  |  |  | // plus.android.importClass(lists); | 
|---|
|  |  |  | // let iterator = lists.iterator(); | 
|---|
|  |  |  | // // console.log(iterator); | 
|---|
|  |  |  | // plus.android.importClass(iterator); | 
|---|
|  |  |  | // // console.log(iterator.hasNext()); | 
|---|
|  |  |  | // if(iterator.hasNext()){   //判断下一个元素的有无 | 
|---|
|  |  |  | //    let d = iterator.next(); | 
|---|
|  |  |  | //    plus.android.importClass(d); | 
|---|
|  |  |  | //    //已连接蓝牙的数据 | 
|---|
|  |  |  | //    // console.log(d.getAddress()); | 
|---|
|  |  |  | //    console.log(d.getAddress() + "----" + d.getName()); | 
|---|
|  |  |  | //    // _this.match_list = { | 
|---|
|  |  |  | //    //    name: d.getName(), | 
|---|
|  |  |  | //    //    mac: d.getAddress() | 
|---|
|  |  |  | //    // }; | 
|---|
|  |  |  | //    let matchList = { | 
|---|
|  |  |  | //       name: d.getName(), | 
|---|
|  |  |  | //       mac: d.getAddress() | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | //    _this.$store.dispatch(SET_CONNECTBLEDATA,matchList); | 
|---|
|  |  |  | //    // console.log(_this.$store.getters.GET_CONNECTBLEDATA) | 
|---|
|  |  |  | //    /** | 
|---|
|  |  |  | //     * 连接打印机 | 
|---|
|  |  |  | //     */ | 
|---|
|  |  |  | //     resolve({code:true,msg:matchList}); | 
|---|
|  |  |  | // }else{ | 
|---|
|  |  |  | //    resolve({code:false}) | 
|---|
|  |  |  | // } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 打开蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$open_bluetooth = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | if (!BAdapter.isEnabled()) { | 
|---|
|  |  |  | BAdapter.enable(); //启动蓝牙 | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已打开', | 
|---|
|  |  |  | duration: 3000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | resolve(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 关闭蓝牙 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$close_bluetooth = function (){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | if (BAdapter.isEnabled()) { | 
|---|
|  |  |  | BAdapter.disable(); //关闭蓝牙 | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已关闭', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: '蓝牙已关闭', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 搜索蓝牙设备 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$search_bluetooth = function(){ | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | let obj = {}; | 
|---|
|  |  |  | return new Promise((resolve,reject)=>{ | 
|---|
|  |  |  | // console.log(BAdapter.isEnabled()); | 
|---|
|  |  |  | // console.log(JSON.stringify(_this.$store.getters)); | 
|---|
|  |  |  | // BAdapter.isconnect("DC:1D:30:7C:74:96"); | 
|---|
|  |  |  | //判断蓝牙是否开启 | 
|---|
|  |  |  | if(!BAdapter.isEnabled()) { | 
|---|
|  |  |  | uni.showModal({ | 
|---|
|  |  |  | title:"提示", | 
|---|
|  |  |  | content:"蓝牙未开启,是否开启蓝牙~", | 
|---|
|  |  |  | success:function(res){ | 
|---|
|  |  |  | if (res.confirm) { | 
|---|
|  |  |  | console.log('用户点击确定'); | 
|---|
|  |  |  | obj.code = false;  //用户点击确定,开启蓝牙 | 
|---|
|  |  |  | obj.msg = "蓝牙未开启"; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | // _this.$open_bluetooth(); | 
|---|
|  |  |  | }else if(res.cancel){ | 
|---|
|  |  |  | // resolve() | 
|---|
|  |  |  | obj.code = null; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | obj.code = true; | 
|---|
|  |  |  | obj.msg = "开启搜索蓝牙"; | 
|---|
|  |  |  | resolve(obj); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 监听蓝牙设备信息 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | Vue.prototype.$search_pipei=function(){ | 
|---|
|  |  |  | let timer = null; | 
|---|
|  |  |  | let _this = this; | 
|---|
|  |  |  | //提示蓝牙开启权限访问 | 
|---|
|  |  |  | uni.openBluetoothAdapter({ | 
|---|
|  |  |  | success(res) { | 
|---|
|  |  |  | if (res.errMsg === "openBluetoothAdapter:ok") { | 
|---|
|  |  |  | //这里是开启蓝牙搜寻 | 
|---|
|  |  |  | uni.startBluetoothDevicesDiscovery({ | 
|---|
|  |  |  | success: (res) => { | 
|---|
|  |  |  | console.log('startBluetoothDevicesDiscovery success', res) | 
|---|
|  |  |  | uni.showLoading({ | 
|---|
|  |  |  | title: "蓝牙搜索中...", | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | //每次搜索都把之前的清空 | 
|---|
|  |  |  | // _this.bArray = []; | 
|---|
|  |  |  | // _this.no_match_list = []; | 
|---|
|  |  |  | _this.$store.dispatch(SET_INFODATA,[]); | 
|---|
|  |  |  | let bArray = [];  //用于蓝牙去重 | 
|---|
|  |  |  | let filter = new IntentFilter();   //实例化过滤器类 | 
|---|
|  |  |  | let BDevice = new BluetoothDevice();  //实例化蓝牙设备类 | 
|---|
|  |  |  | // let connect = _this.$store.state.Bluetooth.connectBLEData; | 
|---|
|  |  |  | // console.log("已连接:" + JSON.stringify(connect)); | 
|---|
|  |  |  | BAdapter.startDiscovery(); //开启搜索 | 
|---|
|  |  |  | let receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', { | 
|---|
|  |  |  | onReceive: function(context, intent) { //回调 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | plus.android.importClass(intent); | 
|---|
|  |  |  | if (intent.getAction() == "android.bluetooth.adapter.action.DISCOVERY_FINISHED") { | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // Intent中获取设备对象 | 
|---|
|  |  |  | BDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); | 
|---|
|  |  |  | console.log(BDevice.getName() + "---" + BDevice.getAddress()); | 
|---|
|  |  |  | // 判断如果蓝牙没有名称则不显示 | 
|---|
|  |  |  | if (BDevice.getName() !== null) { | 
|---|
|  |  |  | //蓝牙去重 | 
|---|
|  |  |  | let address = BDevice.getAddress(); | 
|---|
|  |  |  | //已经连接的蓝牙 | 
|---|
|  |  |  | if(bArray.indexOf(address) == -1){ | 
|---|
|  |  |  | bArray.push(address); | 
|---|
|  |  |  | _this.$store.dispatch(SET_INFODATA,{ | 
|---|
|  |  |  | name: BDevice.getName(), | 
|---|
|  |  |  | mac: BDevice.getAddress() | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //如果intent为空则取消蓝牙监听 | 
|---|
|  |  |  | if (BDevice == null) { | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | uni.hideLoading() | 
|---|
|  |  |  | //获取已匹配的蓝牙 | 
|---|
|  |  |  | // that.bluetooth_list() | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(timer != null){ | 
|---|
|  |  |  | clearTimeout(timer); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | timer = setTimeout(()=>{ | 
|---|
|  |  |  | main.unregisterReceiver(receiver); //取消监听 | 
|---|
|  |  |  | uni.hideLoading(); | 
|---|
|  |  |  | },3000); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜寻错误~", | 
|---|
|  |  |  | duration: 3000, | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | filter.addAction(BDevice.ACTION_FOUND);   //可发现 | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED); | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED);  //搜索结果 | 
|---|
|  |  |  | filter.addAction(BAdapter.ACTION_STATE_CHANGED); | 
|---|
|  |  |  | main.registerReceiver(receiver, filter); //注册监听 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜寻失败~", | 
|---|
|  |  |  | duration: 3000, | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail(err) { | 
|---|
|  |  |  | uni.showToast({ | 
|---|
|  |  |  | icon: "none", | 
|---|
|  |  |  | title: "蓝牙搜索失败" | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|