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: "è“牙æœç´¢å¤±è´¥" }) } }) }