国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序藍(lán)牙流程及代碼

這篇具有很好參考價值的文章主要介紹了微信小程序藍(lán)牙流程及代碼。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

藍(lán)牙小程序源碼,微信小程序,小程序,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-530450.html

import {
	SERVICEID,
	NOTIFYID,
	WRITEID,
	BLUETOOTH_MESSAGE,
	OPERATE_PROCESS
} from "./config.js"
import {
	openBluetoothAdapterFailCallback,
	onBluetoothAdapterStateChangeCallback,
	onBluetoothDeviceFoundCallback,
	getBluetoothAdapterStateSuccessCallback,
	getBluetoothAdapterStateFailCallback,
	createBLEConnectioSuccessCallback,
	createBLEConnectioFailCallback,
	onBLEConnectionStateChangeCallback,
	onBLECharacteristicValueChangeCallback,
	initStoreState,
	notifyBLECharacteristicValueChangeFailCallback
} from "./tool.js"
import {
	hexStringToArrayBuffer,
	sleep,
	getBufferArrayBy20,
	arrayBufferToHexString,
	setCommunicationListUtil,
	getNowTime,
	getMac,
	filterDevices,
	filterDevicesByRe,
	unique,
	showModalByMethod

} from "./utils.js"

let util = require('@/static/utils/utils.js');

import vm from "@/main.js"

//正常藍(lán)牙流程開始
export let bluetoothStart = () => {
	getBluetoothAdapterState();

}

export let onBluetoothAdapterStateChange = () => {
	//如果藍(lán)牙打開-關(guān)閉-再打開-監(jiān)聽不到?
	uni.onBluetoothAdapterStateChange(async (res) => {
		bluetoothExecByAdapterStatus(res);
	})
}

//根據(jù)藍(lán)牙適配器的狀態(tài)、是否正在搜索設(shè)備執(zhí)行不同的操作流程
export let bluetoothExecByAdapterStatus = (res) => {
	console.log("藍(lán)牙適配器狀態(tài)", res);
	if (!res.available) {
		util.showModal("藍(lán)牙適配器不可用,請打開藍(lán)牙");
	} else {
		if (!res.discovering && !vm.isNormalDiscoveryStatus) { // 防止正常停止搜索的時候會觸發(fā)這個條件
			//如果前面已經(jīng)搜索過藍(lán)牙,則不需要再次搜索
			vm.$u.vuex("isImmediateWhitePackage", false); //防止打開手機藍(lán)牙后并連接成功后,直接讓藍(lán)牙發(fā)送指令
			if (vm.isBluetoothDiscovery) {
				getBluetoothDevices();
			} else {
				startAndStopbluetoothDevicesDiscovery();
			}
		}

	}

}

//獲取在藍(lán)牙模塊生效期間所有已發(fā)現(xiàn)的藍(lán)牙設(shè)備。包括已經(jīng)和本機處于連接狀態(tài)的設(shè)備
export let getBluetoothDevices = () => {
	uni.getBluetoothDevices({
		success(res) {
			let devices = res.devices;
			let devicesList = filterDevices(res.devices, vm.currentBike);
			if (devicesList.length > 0) {
				vm.$u.vuex('bluetoothDevice', devicesList[0])
				vm.$u.vuex('connectCount', 0)
				createBLEConnection(devicesList[0])
			} else {
				startAndStopbluetoothDevicesDiscovery();
			}
		}
	})
}


//打開藍(lán)牙設(shè)備并監(jiān)聽藍(lán)牙設(shè)備
export let openAndOnBluetoothAdapter = () => {
	vm.$u.vuex("bluetoothContent", "正在初始化藍(lán)牙");
	uni.openBluetoothAdapter({
		success(res) {
			console.log("打開藍(lán)牙適配器成功");
			startAndStopbluetoothDevicesDiscovery();
		},
		fail(res) {
			console.log("打開藍(lán)牙設(shè)備器失敗", res)
			console.log(res.errMsg == "openBluetoothAdapter:fail already opened")
			//藍(lán)牙適配器已經(jīng)打開
			if (res.errMsg == "openBluetoothAdapter:fail already opened") {
				startAndStopbluetoothDevicesDiscovery();
			} else {
				console.log("打開藍(lán)牙適配器失敗:", BLUETOOTH_MESSAGE[res.errCode]);
				util.showModal("藍(lán)牙適配器不可用,請打開藍(lán)牙或微信APP開啟藍(lán)牙權(quán)限");
				openBluetoothAdapterFailCallback();
			}

		},
		complete() {
			onBluetoothAdapterStateChange();
		}

	})
}

//開始和停止藍(lán)牙搜索
export let startAndStopbluetoothDevicesDiscovery = () => {
	//1、關(guān)閉藍(lán)牙-殺掉進(jìn)程,開啟藍(lán)牙不會重新連接,沒有監(jiān)聽搜索到的設(shè)備
	onBluetoothDeviceFound();
	//2、接步驟1,再關(guān)閉,再開發(fā)藍(lán)牙,連接成功,但是不會觸發(fā)藍(lán)牙連接
	onBLEConnectionStateChange();
	
	vm.$u.vuex('bluetoothContent', '正在搜索藍(lán)牙設(shè)備');
	vm.$u.vuex("isBluetoothDiscovery", true);
	vm.$u.vuex("bluetoothDevice", {}); //清空
	//如果60s都還未搜索到藍(lán)牙,提示未搜索到,提示藍(lán)牙不在可搜索范圍內(nèi),
	let timer = setTimeout(() => {
		clearTimeout(timer);
		//沒有找到設(shè)備并且定時器還在
		if (vm.validatenull(vm.bluetoothDevice)) {
			util.showModal('藍(lán)牙不在可搜索范圍內(nèi)');
			stopBluetoothDevicesDiscovery();
		}
	}, 10000);
	vm.$u.vuex('blueToothSearchTimer', timer);
	uni.startBluetoothDevicesDiscovery({
		services: [], //添加了SERVICEID搜索不到藍(lán)牙
		allowDuplicatesKey: true,
		powerLevel: 'high',
		success() {
			console.log("開始藍(lán)牙搜索成功");
		},
		fail(res) {
			console.log(res);
			util.showModal('開始藍(lán)牙搜索失敗');
			console.log("開始藍(lán)牙搜索失敗:", BLUETOOTH_MESSAGE[res.errCode]);
		}
	})
}


export let stopBluetoothDevicesDiscovery = () => {
	uni.stopBluetoothDevicesDiscovery({
		success() {
			console.log("停止藍(lán)牙搜索成功");
		},
		fail(res) {
			console.log("停止藍(lán)牙搜索失敗:", BLUETOOTH_MESSAGE[res.errCode]);
		},
		complete() {
			vm.$u.vuex("isNormalDiscoveryStatus", true);
			setTimeout(()=>{
				vm.$u.vuex("isNormalDiscoveryStatus", false);
			},1000)
			
		}
	})
}
//監(jiān)聽尋找到新設(shè)備的事件
export let onBluetoothDeviceFound = () => {
	uni.onBluetoothDeviceFound((res) => {
		//搜索到的藍(lán)牙設(shè)備并唯一
		let devices = filterDevices(res.devices, vm.currentBike);
		if (devices.length) {
			console.log("搜索到的目標(biāo)設(shè)備", devices)
			vm.$u.vuex('bluetoothDevice', devices[0])
			clearTimeout(vm.blueToothSearchTimer);
			vm.$u.vuex('connectCount', 0)
			createBLEConnection(devices[0]);
			stopBluetoothDevicesDiscovery();
		}
	})
}

export let getBluetoothAdapterState = () => {
	uni.getBluetoothAdapterState({
		success(res) {
			bluetoothExecByAdapterStatus(res);
		},
		fail(res) {
			console.log("獲取藍(lán)牙適配器狀態(tài)失敗:", BLUETOOTH_MESSAGE[res.errCode]);
			openAndOnBluetoothAdapter();
			util.showModal('藍(lán)牙適配器不可用,請打開藍(lán)牙');
		}
	})
}

//ios必須要執(zhí)行
let getBLEDeviceServices = (device) => {
	uni.getBLEDeviceServices({
		deviceId: device.deviceId,
		success(res) {
			console.log(`獲取${device.deviceId}服務(wù)成功`, res);
			getBLEDeviceCharacteristics(device);
		},
		fail(res) {
			console.log(`獲取${device.deviceId}服務(wù)失敗:`, BLUETOOTH_MESSAGE[res.errCode]);
			getBLEDeviceCharacteristics(device);
		}
	})
}

export let createBLEConnection = (device) => {
	console.log("正在連接藍(lán)牙")
	vm.$u.vuex('bluetoothContent', '正在連接藍(lán)牙設(shè)備');
	//如果當(dāng)前狀態(tài)沒有連接,只去連接藍(lán)牙
	if (!vm.isConnected && !vm.validatenull(vm.bluetoothDevice)) {
		uni.createBLEConnection({
			deviceId: device.deviceId,
			success(res) {
				console.log(`與藍(lán)牙設(shè)備${device.name}創(chuàng)建連接成功`, res);
				getBLEDeviceServices(device);
				createBLEConnectioSuccessCallback();
			},
			fail(res) {
				console.log(res)
				if(res.errCode == 10001) return;//如果是藍(lán)牙設(shè)配器沒有打開,則直接退出連接
				if (vm.connectCount < 4) {
					createBLEConnection(device);
					let connectCount = vm.connectCount;
					let newConnectCount = connectCount + 1;
					vm.$u.vuex('connectCount', newConnectCount);
				} else {
					util.showModal('藍(lán)牙連接失敗');
				}
			}
		})
	}

}

//ios必須要執(zhí)行
let getBLEDeviceCharacteristics = (device) => {
	uni.getBLEDeviceCharacteristics({
		deviceId: device.deviceId,
		serviceId: SERVICEID,
		success: function(res) {
			console.log(`獲取${device.deviceId}特征值成功`, res);
			notifyAndOnBLECharacteristicValueChange(device);
		},
		fail: function(res) {
			console.log(`獲取${device.deviceId}特征值失敗`, res);
		},
	})
}

export let onBLEConnectionStateChange = () => {
	uni.onBLEConnectionStateChange((res) => {
		console.log("監(jiān)聽藍(lán)牙是否斷開", res);
		if(vm.lastConnectionStatus == res.connected){
			let bluetoothDisconnectedCount = vm.bluetoothDisconnectedCount;
			let newBluetoothDisconnectedCount = bluetoothDisconnectedCount+1;
			vm.$u.vuex("bluetoothDisconnectedCount",newBluetoothDisconnectedCount);
		}else{
			vm.$u.vuex("bluetoothDisconnectedCount",0);
		}
		vm.$u.vuex("isConnected", res.connected);
		if (!res.connected && !vm.isNormalBluetoothDisconnect && vm.bluetoothDisconnectedCount < 2) { //當(dāng)前檢測到時異常斷開狀態(tài),則進(jìn)行重連操作,連接不上,還是會觸發(fā)這個監(jiān)聽
			vm.$u.vuex('connectCount', 0);
			createBLEConnection(vm.bluetoothDevice);
		}
		vm.$u.vuex("lastConnectionStatus", res.connected);
		onBLEConnectionStateChangeCallback(res);
	})
}

//開始并且監(jiān)聽特征值的變化
export let notifyAndOnBLECharacteristicValueChange = (device) => {
	//防止沒有更換狀態(tài)
	uni.notifyBLECharacteristicValueChange({
		state: true,
		deviceId: device.deviceId,
		serviceId: SERVICEID,
		characteristicId: NOTIFYID,
		success(res) {
			console.log("開啟notify通知模式成功", res);
			uni.onBLECharacteristicValueChange((res) => {
				console.log("監(jiān)聽特征值", res);
				clearTimeout(vm.notifyTimerId);
				//關(guān)閉藍(lán)牙連接
				onBLECharacteristicValueChangeCallback(device, res);
			})
		},
		fail(res) {
			notifyBLECharacteristicValueChangeFailCallback(device, res);
			console.log("開啟notify通知模式失敗:", BLUETOOTH_MESSAGE[res.errCode]);
		}
	})
}


let writeBLECharacteristicValue = (device, value) => {
	console.log("寫入數(shù)據(jù)", arrayBufferToHexString(value));

	uni.writeBLECharacteristicValue({
		deviceId: device.deviceId,
		serviceId: SERVICEID,
		characteristicId: WRITEID,
		value,
		success(res) {
			console.log("寫入數(shù)據(jù)成功", res);
			//判斷是否是最后一包,如果是最后一包,則開啟通訊計時器
		},
		fail(res) {
			console.log("寫入數(shù)據(jù)失敗", BLUETOOTH_MESSAGE[res.errCode]);
			console.log("寫入數(shù)據(jù)失敗", res);
			util.showModal("寫入數(shù)據(jù)失敗");
		}

	})
}

export let closeBLEConnection = (device, callback = () => {}) => {
	vm.$u.vuex("isNormalBluetoothDisconnect", true);
	uni.closeBLEConnection({
		deviceId: device.deviceId,
		success() {
			console.log("關(guān)閉藍(lán)牙連接成功");
		},
		fail(res) {
			console.log("關(guān)閉藍(lán)牙連接失敗", res);

			console.log("關(guān)閉藍(lán)牙連接失敗", BLUETOOTH_MESSAGE[res.errCode]);
		},
		complete() {
			setTimeout(() => {
				vm.$u.vuex("isNormalBluetoothDisconnect", false);
			}, 1000)
			callback();
		}
	})
}


export let closeBluetoothAdapter = (callback) => {
	return new Promise((resolve, reject) => {
		uni.closeBluetoothAdapter({
			success() {
				console.log("關(guān)閉藍(lán)牙適配器成功");
			},
			fail(res) {
				console.log("關(guān)閉藍(lán)牙適配器失?。?, BLUETOOTH_MESSAGE[res.errCode]);
			},
			complete() {
				callback();
			}
		})
	})
}

//不分包寫數(shù)據(jù)
export let writeDataToDevice = (device, data) => {
	console.log("發(fā)送數(shù)據(jù)", data);
	vm.$u.vuex("bluetoothContent", "正在發(fā)送指令");

	let allBuffer = hexStringToArrayBuffer(data);
	writeBLECharacteristicValue(device, allBuffer);
}

//分包寫數(shù)據(jù)
export let writeDataToDeviceBySubPackage = (data) => {
	vm.$u.vuex("commandMessage", '');
	vm.$u.vuex("bluetoothContent", `正在發(fā)送${vm.commandName}指令`);

	let bufferArray = getBufferArrayBy20(data);
	console.log('bufferArray.length', bufferArray.length);
	for (let i = 0; i < bufferArray.length; i++) {
		//sleep(1); //同步延遲1ms
		writeBLECharacteristicValue(bufferArray[i], i == bufferArray.length - 1);
	}

	// let allBuffer = hexStringToArrayBuffer(data);
	// writeBLECharacteristicValue(allBuffer);
}


export let getConnectedBluetoothDevices = (callback) => {
	uni.getConnectedBluetoothDevices({
		services: [SERVICEID],
		success(res) {
			console.log("獲取連接的藍(lán)牙設(shè)備成功", res);
			callback(res.devices)
		},
		fail(res) {
			console.log("獲取連接的藍(lán)牙設(shè)備失敗", res);
			callback([]);
		},
		complete() {

		}
	})

}

到了這里,關(guān)于微信小程序藍(lán)牙流程及代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序食堂訂餐系統(tǒng)源碼

    (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序食堂訂餐系統(tǒng)源碼

    項目獲取請看文章最底下官網(wǎng) 食堂訂餐系統(tǒng)后臺是基于java編程語言,mysql數(shù)據(jù)庫,ssm框架,idea工具開發(fā),用戶端是采用微信小程序端開發(fā),本系統(tǒng)主要分為用戶,管理員,商家三個端,用戶可以注冊登陸微信小程序,查看菜品,購買菜品下訂單,查看訂單,查看訂單配送,

    2024年02月16日
    瀏覽(31)
  • 微信小程序模版|健康菜譜微信小程序源碼

    微信小程序模版|健康菜譜微信小程序源碼

    ?作者主頁:編程指南針 作者簡介:Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN博客專家 、CSDN內(nèi)容合伙人、掘金特邀作者、阿里云博客專家、51CTO特邀作者、多年架構(gòu)師設(shè)計經(jīng)驗、騰訊課堂常駐講師 主要內(nèi)容:Java項目、Python項目、前端項目、人工智能與大數(shù)據(jù)、簡歷模板、學(xué)習(xí)資料、面試題

    2024年02月02日
    瀏覽(20)
  • 【微信小程序】實現(xiàn)微信小程序登錄(附源碼)

    【微信小程序】實現(xiàn)微信小程序登錄(附源碼)

    通過 點擊登錄按鈕 , 調(diào)用微信接口 wx.getUserProfile拿到微信的個人信息,先 檢查是否之前已經(jīng)登錄 ,若沒登錄則將拿到的個人信息調(diào)用后臺的接口,把個人信息傳給后臺, 登錄成功之后 把相關(guān)信息存儲在app.globalData中共享給全局使用 (這里使用微信云開發(fā)作為后臺,提前建

    2024年02月11日
    瀏覽(88)
  • uniapp - 微信小程序接入騰訊視頻播放器功能插件,uniapp開發(fā)微信小程序端調(diào)用引入并使用騰訊視頻播放組件完整全流程(詳細(xì)示例源碼,一鍵復(fù)制開箱即用)

    uniapp - 微信小程序接入騰訊視頻播放器功能插件,uniapp開發(fā)微信小程序端調(diào)用引入并使用騰訊視頻播放組件完整全流程(詳細(xì)示例源碼,一鍵復(fù)制開箱即用)

    在uniapp 微信小程序項目中,集成騰訊視頻功能插件,實現(xiàn)播放騰訊視頻效果,附帶詳細(xì)示例源碼及注釋, 你可以跟著步驟一步步來,保證幾分鐘就能快速在uniapp小程序項目中植入騰訊視頻功能!

    2024年02月12日
    瀏覽(95)
  • (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序商店管理系統(tǒng)源碼成品

    (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序商店管理系統(tǒng)源碼成品

    項目獲取請看文章最底下官網(wǎng) 商店管理系統(tǒng)是基于微信小程序,java編程語言和mysql數(shù)據(jù)庫和idea開發(fā)工具作為后臺,微信端采用微信開發(fā)工具開發(fā)。本系統(tǒng)分為用戶和管理員兩個角色,用戶的主要功能有登陸微信小程序,查看促銷資訊,商品分類,商品詳情,加入購物車,生

    2024年02月14日
    瀏覽(29)
  • (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序電影院訂票系統(tǒng)源碼

    (微信小程序畢業(yè)設(shè)計源碼)基于微信小程序電影院訂票系統(tǒng)源碼

    項目獲取請看文章最底下官網(wǎng) 電影院訂票系統(tǒng)是基于微信小程序端和網(wǎng)頁后端,系統(tǒng)采用java編程語言,mysql數(shù)據(jù)庫,idea開發(fā)工具,ssm框架開發(fā),本系統(tǒng)分為用戶和管理員兩個角色,用戶微信小程序端主要功能是可以登陸注冊系統(tǒng),查看電影推薦,電影分類,會員手冊,在線

    2024年02月16日
    瀏覽(28)
  • 微信小程序:檢討書生成微信小程序源碼

    微信小程序:檢討書生成微信小程序源碼

    對于經(jīng)常寫檢討的小伙伴來說,福音來了 因為這是一款檢討書生成小程序 所以再也不用為了寫檢討而煩惱了哦 支持自定義字?jǐn)?shù)下線,主題自定義 支持多種類型檢討比如:學(xué)生黨的,男朋友,領(lǐng)導(dǎo)演講稿,共青團(tuán)申請書等 該小程序安裝搭建簡單,特別適合新手上手 小程序源碼下載地址

    2024年02月09日
    瀏覽(47)
  • 抓取微信小程序源碼教程,扒微信小程序文件等

    抓取微信小程序源碼教程,扒微信小程序文件等

    想成為一名微信小程序的開發(fā)者,前端思路的學(xué)習(xí)和安全意識是非常有必要的,故務(wù)必掌握小程序反編譯技能。這里用到了2個工具《包解密》與《反編譯》(非原創(chuàng),均來自網(wǎng)上的大佬),特別適合新手,而且都是免費的!第一次操作可能會慢一些,熟練了之后,3秒抓取一

    2024年02月08日
    瀏覽(25)
  • 網(wǎng)址打包微信小程序源碼 wap轉(zhuǎn)微信小程序 網(wǎng)站轉(zhuǎn)小程序源碼 網(wǎng)址轉(zhuǎn)小程序開發(fā)

    網(wǎng)址打包微信小程序源碼 wap轉(zhuǎn)微信小程序 網(wǎng)站轉(zhuǎn)小程序源碼 網(wǎng)址轉(zhuǎn)小程序開發(fā)

    我們都知道微信小程序是無法直接打開網(wǎng)址的。 這個小程序源碼提供了一種將網(wǎng)址直接打包成微信小程序的方法, 使得用戶可以在微信小程序中直接訪問這些網(wǎng)址內(nèi)容。 這個源碼沒有進(jìn)行加密,可以直接查看和修改。 將下面代碼中的網(wǎng)站改成你的就行了,簡單易用 藍(lán)奏云

    2024年04月10日
    瀏覽(23)
  • 最新影視視頻微信小程序源碼-帶支付和采集功能/微信小程序影視源碼PHP(更新)

    最新影視視頻微信小程序源碼-帶支付和采集功能/微信小程序影視源碼PHP(更新)

    源碼簡介: 這個影視視頻微信小程序源碼,新更新的,它還帶支付和采集功能,作為微信小程序影視源碼,它可以為用戶 提供豐富的影視資源,包括電影、電視劇、綜藝節(jié)目等。 這個小程序影視源碼,還帶有變現(xiàn)模式,它的盈利方式挺直接了當(dāng)?shù)?,就是賣會員的,只要無腦

    2024年02月08日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包