jsp网站开发软件分享到微信 没有图标 wordpress

bicheng/2026/1/21 12:57:38/文章来源:
jsp网站开发软件,分享到微信 没有图标 wordpress,郑州企业建设网站服务,wordpress分类链接uniapp小程序连接蓝牙设备 一、初始化蓝牙模块二、开始搜索三、连接蓝牙四、监听特征值变化五、调用示例utils.js文件 一、初始化蓝牙模块 这一步是必须的#xff0c;在开发项目过程中#xff0c;初始化蓝牙模块之后#xff0c;紧接着就要开启一些监听的api#xff0c;供后… uniapp小程序连接蓝牙设备 一、初始化蓝牙模块二、开始搜索三、连接蓝牙四、监听特征值变化五、调用示例utils.js文件 一、初始化蓝牙模块 这一步是必须的在开发项目过程中初始化蓝牙模块之后紧接着就要开启一些监听的api供后续设备读写数据时监听变化。 initBLE(callback) {//提前定义变量直接在uni的api中使用this是不可以的var self this;// 第一步初始化蓝牙模块uni.openBluetoothAdapter({success: function (e) {utils.toast(初始化蓝牙适配器成功);},fail: function (e) {utils.toast(初始化蓝牙适配器失败 : JSON.stringify(e));},});// 检查蓝牙适配器状态变化// 这一步主要是为了在连接成功蓝牙之后关闭蓝牙搜索蓝牙搜索非常耗费性能uni.onBluetoothAdapterStateChange(function (e) {self.bluetooth.available e.available;if (!e.available) {utils.toast(蓝牙适配器不可用);if (self.bluetooth.startDiscovery) {self.bluetooth.startDiscovery false;self.stopBluetoothDevicesDiscovery();}}});// 监听搜索到设备uni.onBluetoothDeviceFound(function (e) {// 当搜索到设备后可以在e.devices中获取到设备信息列表if (!e.devices) return;for (var i 0; i e.devices.length; i) {var device e.devices[i];for (var j 0; j self.discoveryList.length; j) {var item self.discoveryList[j];// 去重if (item.deviceId device.deviceId) {return;}}self.discoveryList.push(device);}});// 监听蓝牙设备连接变化uni.onBLEConnectionStateChange(function (e) {// 该方法回调中可以用于处理连接意外断开等异常情况self.currentDeviceStatus e.connected ? 1 : 2;// 在连续盘点过程中是不允许断开的万一因为其他什么原因断开了则尝试停止连续盘点if (!e.connected self.inventoryLabelForm.looping) {self.sendStopLoopInventoryCmd(); //停止盘点}});// 读数据uni.onBLECharacteristicValueChange(function (e) {if (e.deviceId ! self.currentDevice.deviceId) return;var value self.buffer2Hex(e.value);console.log(e); //查看是否有R20固定返回值utils.toast(读数据178 JSON.stringify(e));self.lastRcvData value;self.doRcvData();});self.historyList utils.getHistoryList();// 如果有cb回调函数则需要停止下拉刷新if (callback) {// setTimeout这里等待一下上面的异步初始化setTimeout(() {callback();}, 1000);}},二、开始搜索 以上只是蓝牙的初始化操作要想真正实现蓝牙连接从第二步开始 // 开启蓝牙搜索服务startBluetoothDevicesDiscovery() {var self this;// 小程序环境需要等待一下不然会报错setTimeout(() {// 开始搜寻附近的蓝牙外围设备uni.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,success: function (e) {self.bluetooth.discoverying true;//开启搜索成功此时初始化中定义的onBluetoothDeviceFound会自动执行},fail: function (e) {utils.toast(开始搜索蓝牙设备失败 : JSON.stringify(e));},});}, 1000);},三、连接蓝牙 目前为止我们已经搜索到蓝牙设备了下面要做的就是在蓝牙列表中选择对应的蓝牙设备进行连接 // 连接设备onConnectDevice(device) {// device是选择的设备对象在这可以取到设备的deviceId供后续使用var self this;this.onCloseDiscoveryDialog();this.onCloseHistoryDialog();this.currentDevice device;this.currentDeviceStatus 3;this.lastRcvData ;// 创建一个BLE连接uni.createBLEConnection({deviceId: device.deviceId,//这里使用设备id来创建连接success: function (e) {// 创建完成后获取服务这在ios中是必须的否则会导致后面读取数据失败uni.getBLEDeviceServices({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: device.deviceId,success(res) {// 获取特征值这在ios中是必须的否则会导致后面读取数据失败uni.getBLEDeviceCharacteristics({// 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接deviceId: device.deviceId,// 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取serviceId: RX_SERVICE_UUID, //因为这里使用的是固定服务所以事先定义过常量了这里直接使用success(res) {// 创建连接-获取服务-获取特征值之后就可以开启nofity功能了self.enableBleNotify(device);},fail() {},});},});// 开启nofity功能self.enableBleNotify(device);},fail: function (e) {utils.toast(连接蓝牙设备失败 : JSON.stringify(e));self.currentDeviceStatus 2;},});// 保存设备到历史记录里var flag true;for (var i 0; i this.historyList.length; i) {var item this.historyList[i];if (item.deviceId device.deviceId) {this.historyList[i] device;flag false;}}if (flag) {this.historyList.push(device);}utils.saveHistoryList(this.historyList);},四、监听特征值变化 enableBleNotify(device) {// 这里监听时,ios测试需要有点延迟,安卓的话,只在测试机上测试过,不需要延迟// 这里延迟1秒兼容,反正差距不大setTimeout(function () {uni.notifyBLECharacteristicValueChange({state: true,deviceId: device.deviceId,serviceId: RX_SERVICE_UUID,characteristicId: R_UUID,success: function (e) {//到了此时蓝牙才算真正的连接成功},fail: function (e) {},});}, 1000);},五、调用示例 这里以单次盘点为例 // 单步盘点标签async onOneStepInventory() {var self this;if (!this.checkDeviceConnect()) return;this.inventoryLabelForm.startTime utils.currentTimeMillis(); //获取盘点时间的// 单步盘点关闭enableRssithis.inventoryLabelForm.enableRssi false;// 发送固定值await this.sendR20Hex(); //这里是定制需要没有可以省去var cmd this.generateUHFProtocl(0x80, utils.number2Hex(5000, 2));self.sendData(cmd);},//发送固定值async sendR20Hex() {await this.sendData(A55A0029F011D75238EE46C3ECFFCE3B9AFC093ACC13F711A6ADF3FF76ACE59A8DF1BA704E22EC0D0A);},//写入操作发送数据连续存盘指令自行实现了不调用该方法async sendData(hexStr, serviceId, characteristicId) {if (utils.isBlank(hexStr)) return;serviceId serviceId || RX_SERVICE_UUID;characteristicId characteristicId || W_UUID;var self this;var sendData;// ble发送数据时需要分包最多20字节if (hexStr.length 40) {sendData hexStr.substr(0, 40);hexStr hexStr.substr(40, hexStr.length - 40);} else {sendData hexStr;hexStr null;}this.logSend(sendData);var buffer new ArrayBuffer(sendData.length / 2);var bufView new Uint8Array(buffer);for (var i 0; i sendData.length; i 2) {bufView[i / 2] parseInt(sendData.substr(i, 2), 16);}//这里写了一个promise是为了在执行正常操作之前先执行固定值操作return new Promise((resolve, reject) {uni.writeBLECharacteristicValue({deviceId: self.currentDevice.deviceId,serviceId: serviceId,characteristicId: characteristicId,value: buffer,success: async function (e) {if (hexStr) {//超过20字节 递归循环写入await self.sendData(hexStr);}console.log(写入数据成功391 sendData);// 由于写字节限制如果还有未发送完的数据接着继续发送resolve();},fail: function (e) {},});});}, utils.js文件 这里主要存放一些转换方法上面用到的utils.xx方法可以在此处查看 export default {alert: function (content, title 提示) {uni.showModal({title,content,showCancel: false,success: function (res) {},});},confirm: function (content, title 提示) {uni.showModal({title,content,success: function (res) {if (res.confirm) {console.log(用户点击确定);} else if (res.cancel) {console.log(用户点击取消);}},});},toast: function (title, duration 1000) {uni.showToast({title,icon: none,duration,});},showWaiting: function (title 加载中) {uni.showLoading({title,});},closeWaiting: function () {uni.hideLoading();},actionSheet: function (itemList) {uni.showActionSheet({itemList,success: function (res) {console.log(选中了第 (res.tapIndex 1) 个按钮);},fail: function (res) {console.log(res.errMsg);},});},saveHistoryList: function (list) {try {uni.setStorageSync(history_list, JSON.stringify(list));} catch (e) {// error}},getHistoryList: function () {try {const value uni.getStorageSync(history_list);if (value) {return JSON.parse(value);} else {return [];}} catch (e) {// error}},clearHistoryList: function () {try {uni.removeStorageSync(history_list);} catch (e) {// error}},leftPad: function (value, length, fill) {while (length - value.length 0) {value fill value;}return value;},number2Hex: function (value, byteLength) {value parseInt(value);var hex value.toString(16).toUpperCase();byteLength byteLength || hex.length / 2 (hex.length % 2);return this.leftPad(hex, byteLength * 2, 0);},bin2Hex: function (value, byteLength) {byteLength byteLength || 1;byteLength Math.max(value.length / 8 (value.length % 8 0 ? 1 : 0),byteLength);value this.leftPad(value, byteLength * 8, 0);var hex ;for (var i 0; i value.length; i 8) {hex this.number2Hex(parseInt(value.substr(i, 8), 2), 1);}return hex;},isNull: function (value) {if (value null) return true;if (undefined typeof value) return true;return false;},isString: function (value) {return [object String] Object.prototype.toString.call(value);},isBlank: function (value) {if (this.isNull(value)) return true;if (!this.isString(value)) return true;if (value.trim().length 0) return true;return false;},str2Hex: function (str) {var hex ;for (var i 0; i str.length; i) {hex this.number2Hex(str.charCodeAt(i), 1);}return hex;},currentTimeMillis: function () {return new Date().getTime();},hex2ByteArray: function (hex) {var result [];for (var i 0; i hex.length; i 2) {var value parseInt(hex.substr(i, 2), 16);if (value 127) {value - 0x100;}result.push(value);}return result;},/*** hex转字符串* param {Object} hex* param {Object} charset 编码格式默认为utf-8*/hex2Str: function (hex, charset utf-8) {var bytesArray this.hex2ByteArray(hex);try {var str;// 创建一个TextDecoder对象指定所需的编码格式const decoder new TextDecoder(charset);// 将ByteArray转换为字符串str decoder.decode(bytesArray);return str;} catch (e) {this.toast(错误的编码格式);}}, };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西安做商铺的网站php网站建设一流程

一.简单介绍 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。 支持python2和python3 二.框架特点 继承 Requests 的全部特性,轻松实现…

网站建设基础流程图免费个人简历模板网站

来源:智源社区作者:David Gunning, Eric Vorm, Jennifer Yunyan Wang, Matt Turek编译:牛梦琳摘要:从项目管理人员和评估人员的角度,对国防高级研究计划局(DARPA)的可解释人工智能(X…

广东手机网站建设报价表wordpress和django

ubuntu解压zip乱码问题 安装 convmv sudo apt-get install convmv安装p7zip-full sudo apt install p7zip-full 解压乱码的文件夹 LANGC 7z x filename.zip -r -o/指定解压到的目标目录执行如下命令 convmv -f gbk -t utf8 -r --notest *

北京公司注册地址要求wordpress评论优化插件

地铁公交的上班路上、咖啡馆里等人的时候,这些碎片化时间都是现代人学习和充电的机会,根据第42次CNNIC中国互联网发展状况统计报告,截至2018年6月,网络文学用户规模已达4.06亿,占网民总体50.6%;手机网络文学…

怎样弄免费网站wordpress 还是自己写

299. 猜数字游戏 题目描述: 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提示&…

网站美工外包公司短视频创作平台

RAID的组合方式 RAID0:多个硬盘同时工作,可提供性能,无冗余机制 RAID1:数据保存多份,提供冗余机制,性能受到影响 RAID3:存在数据盘和单独校验盘,数据写入 至数据盘后需要运算且将…

莆田建设项目环境网站西安有哪些网站建设公司好

Linux C/C 开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全) c中一个类中无非有四种成员:静态数据成员和非静态数据成员,静态函数和非静态函数。 1.非静态数据成员被放在每一个对象体内作为对象专有的数据成员。 2.静态数据成员被提取出来…

濮阳市网站怎么做宣传网站空间免费 优帮云

安全机制 墨菲定律 如果有两种选择,其中一种将导致灾难,则必定有人会作出这种选择。即:做事不要有侥幸心理。 常用安全技术 认证、授权、审计、安全通信 加密算法和协议 对称加密算法 加密和解密使用同一个秘钥。 特性 加密、解密使…

南京做网站制作公司网页游戏开服表时间表

先看一下这个 TableField("show") 这个注解表示当前属性对应在数据库的字段为show,但是show在mysql中为关键字,直接查询会导致语法错误 正确写法应该是 但写sql由和mybatis-plus理念相违背, 并且无法轻松创建对应方法&#xff0…

东莞东城网站建设网站关键词排名服务

24西安电子科技大学—数学与统计学院—考研录取统计 01、数学与统计学院各个方向 02、24数学与统计学院近三年复试分数线对比 数统院24年院线相对于23年院线增加高达30分,确实增长浮动比较高,接近30分的水平,因此大家更需要好好去努力&#x…

南昌建网站网站建设项目报价

ADB 命令之 模拟按键/输入 模拟按键/输入 在 ​​adb shell​​​ 里有个很实用的命令叫 ​​input​​&#xff0c;通过它可以做一些有趣的事情。 ​​input​​ 命令的完整 help 信息如下&#xff1a; Usage: input [<source>] <command> [<arg>...] Th…

正规的郑州网站建设软件开发网站开发培训

经典的设计模式有23种&#xff0c;但是常用的设计模式一般情况下不会到一半&#xff0c;我们就针对一些常用的设计模式进行一些详细的讲解和分析&#xff0c;方便大家更加容易理解和使用设计模式。 23种经典的设计模式分为三类&#xff1a;创建型、结构型、行为型。前面我们已经…

深圳品牌网站推广百度推广去哪里学技术

C语言之指针知识点总结 文章目录 C语言之指针知识点总结1. 初识指针1.1 取地址操作符 &1.2 指针变量1.3 解引用操作符 *1.4 指针变量1.4.1 大小1.4.2 指针类型的意义 1.5 void*指针1.6 const关键字1.61 const修饰变量1.6.2 const修饰指针变量 1.7 指针的运算1.7.1 指针-整数…

做一个网站成本是多少网站购物车代码怎么做

在品牌发展的道路上&#xff0c;产品质量的把控非常重要&#xff0c;关系到品牌的竞争力&#xff0c;但品牌要长期发展&#xff0c;产品要获得市场足够份额&#xff0c;还需要有稳定的价格体系做支撑&#xff0c;这个价格不是仅凭品牌单方面的定价而定&#xff0c;而是整个渠道…

东莞教育团购网站建设网页版传奇下载

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

如何做网站内链wordpress编辑器

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…

深圳网站设计制作北京网站建设模板下载

\cong \sim \simeq 对应的Latex实现分别为&#xff1a; ≅ \cong ≅ ∼ \sim ∼ ≃ \simeq ≃

美食网站建设书vi设计要做什么

测试环境信息: 系统为银河麒麟V10 数据库为Kingbase ES V8 数据库安装目录为/opt/Kingbase/ES/V8 ksql命令位于/opt/Kingbase/ES/V8/Server/bin下 使用--help获取帮助 续上图 1.查看数据库列表 ./ksql -U system -l 2.查看数据库版本 ./ksql -V 3.连接指定的数据库tes…

酷播wordpress视频插件赣州网站seo

如果想要将一个文件的内容拷贝到另一个文件中,常规的做法是读取源文件,然后再把内容写入到目的文件中: #include <fstream> #include <iostream> #include <string> #include <vector>using namespace std;vector<string> readFile(const st…

怎么做自己的网站平台文化网站策划

💡该教程为改进YOLOv8指南,属于《芒果书》📚系列,包含大量的原创首发改进方式🚀 💡🚀🚀🚀本博客内含改进源代码,按步骤操作运行改进后的代码即可 💡更方便的统计更多实验数据,方便写作 新增YOLOv8打印FPS指标 完善(一键YOLOv8打印FPS指标) 文章目录 完善…