| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 | 
							- 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);
 
- 	console.log("BManager ",BManager)
 
- 	//获取蓝牙适配器对象类
 
- 	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());
 
- 												
 
- 											let bule =	plus.android.importClass("android.bluetooth.BluetoothClass")
 
- 											bule = BDevice.getBluetoothClass()
 
- 											let major = bule.getMajorDeviceClass();
 
- 											// let blue = plus.android.importClass();
 
- 											
 
- 											// bule = BDevice.getBluetoothClass();
 
- 											// console.log("major:"+major)
 
- 											//判断是不是打印机蓝牙
 
- 											if (major == 1536) {
 
- 												// 判断如果蓝牙没有名称则不显示
 
- 												if (BDevice.getName() !== null) {
 
- 													//蓝牙去重
 
- 													let address = BDevice.getAddress();
 
- 													//已经连接的蓝牙
 
- 													console.log("AAAAAAAAAAAAAbArray ",bArray)
 
- 													console.log("AAAAAAAAAAAAaddress ",address)
 
- 														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) {
 
- 										console.log(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: "蓝牙搜索失败"
 
- 			})
 
- 		}
 
- 	})
 
- }
 
 
  |