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: "蓝牙搜索失败" }) } }) }