微信小程序——实现蓝牙设备搜索及连接功能

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:微信小程序学习分享
✨特色专栏:国学周更-心性养成之路
🥭本文内容:微信小程序——实现蓝牙设备搜索及连接功能

文章目录

    • 1、在小程序的app.json文件中添加蓝牙权限
    • 2、新建一个展示蓝牙列表的界面 index
      • 2.1、在index.wxml文件中,添加如下代码:
      • 2.2、在index.wxss文件中添加如下代码:
      • 2.3、在index.js文件中相关代码及说明
    • 3、测试

在这里插入图片描述

1、在小程序的app.json文件中添加蓝牙权限

在app.json中写入如下代码

  "permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序定位"},"scope.bluetooth": {"desc": "你的蓝牙信息将用于小程序连接设备"}},

2、新建一个展示蓝牙列表的界面 index

在pages目录下,新建一个Page,命名为index,生成如下文件:

在这里插入图片描述

2.1、在index.wxml文件中,添加如下代码:

<view class="container"><view class="title">蓝牙设备列表</view><view class="list"><block wx:for="{{devices}}" wx:key="index"><view class="item" bindtap="connectDevice" data-device="{{item}}"><view class="name">{{item.name}}</view><view class="rssi">信号强度:{{item.RSSI}}</view></view></block></view>
</view>

2.2、在index.wxss文件中添加如下代码:

.container {display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100vh;
}.title {font-size: 24px;font-weight: bold;margin-bottom: 20px;
}.list {width: 100%;
}.item {display: flex;flex-direction: row;align-items: center;justify-content: space-between;padding: 10px;border-bottom: 1px solid #eee;
}.name {font-size: 16px;font-weight: bold;
}.rssi {font-size: 14px;color: #999;
}

2.3、在index.js文件中相关代码及说明

  • 第一步:蓝牙初始化,wx.openBluetoothAdapter(Object object);

  初始化蓝牙模块。iOS 上开启主机/从机(外围设备)模式时需分别调用一次,并指定对应的 mode。

  // 第一步,蓝牙初始化成功onLoad: function () {wx.openBluetoothAdapter({success: (res) => {console.log('第一步,蓝牙初始化成功', res)//开始搜索附近蓝牙this.startBluetoothDevicesDiscovery()},fail: (res) => {console.log("第一步、蓝牙初始化失败", res);wx.showToast({ title: '蓝牙初始化失败', icon: 'none' })}})},

注意

  其他蓝牙相关 API 必须在 wx.openBluetoothAdapter 调用之后使用。否则 API 会返回错误(errCode=10000)。

  在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用 wx.openBluetoothAdapter 会返回错误(errCode=10001),表示手机蓝牙功能不可用。此时小程序蓝牙模块已经初始化完成,可通过 wx.onBluetoothAdapterStateChange 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。

  • 第二步:开始搜索附近的蓝牙设备,wx.startBluetoothDevicesDiscovery(Object object)

  开始搜寻附近的蓝牙外围设备。

  此操作比较耗费系统资源,请在搜索到需要的设备后及时调用 wx.stopBluetoothDevicesDiscovery 停止搜索

  // 第二步 开始搜索附近的蓝牙设备startBluetoothDevicesDiscovery() {wx.startBluetoothDevicesDiscovery({allowDuplicatesKey: false,success: (res) => {console.log('开始搜索附近的蓝牙设备', res)this.onBluetoothDeviceFound()},})},

注意

  考虑到蓝牙功能可以间接进行定位,安卓 6.0 及以上版本,无定位权限或定位开关未打开时,无法进行设备搜索。这种情况下,安卓 8.0.16 前,接口调用成功但无法扫描设备;8.0.16 及以上版本,会返回错误。

  • 第三步:监听发现附近的蓝牙设备,wx.onBluetoothDeviceFound(function listener)

  监听搜索到新设备的事件

  // 第三步 监听发现附近的蓝牙设备onBluetoothDeviceFound() {wx.onBluetoothDeviceFound((res) => {res.devices.forEach(device => {if (!device.name && !device.localName) { return }console.log("发现的蓝牙设备", device)this.data.devices.push(device)this.setData({ devices: this.data.devices })})})},

注意

  若在 wx.onBluetoothDeviceFound 回调了某个设备,则此设备会添加到 wx.getBluetoothDevices 接口获取到的数组中。

  • 第四步:建立连接,wx.createBLEConnection(Object object)

  连接蓝牙低功耗设备。

  若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需再次进行搜索操作。

  // 第四步、 建立连接connectDevice: function (e) {const device = e.currentTarget.dataset.devicewx.createBLEConnection({deviceId: device.deviceId,success: (res) => {console.log('createBLEConnection success', res)wx.showToast({ title: '蓝牙连接成功', icon: 'none' })this.stopBluetoothDevicesDiscovery()wx.navigateTo({url: '/pages/main/main?deviceId=' + device.deviceId})},fail: (res) => {wx.showToast({ title: '蓝牙连接失败', icon: 'none' })}})},

注意

  请保证尽量成对的调用 wx.createBLEConnection 和 wx.closeBLEConnection 接口。安卓如果重复调用 wx.createBLEConnection 创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用 closeBLEConnection 的时候并不能真正的断开与设备的连接。

  蓝牙连接随时可能断开,建议监听 wx.onBLEConnectionStateChange 回调事件,当蓝牙设备断开时按需执行重连操作。

  若对未连接的设备或已断开连接的设备调用数据读写操作的接口,会返回 10006 错误,建议进行重连操作。

  • 第五步:停止搜索,wx.stopBluetoothDevicesDiscovery(Object object)

  停止搜寻附近的蓝牙外围设备。若已经找到需要的蓝牙设备并不需要继续搜索时,建议调用该接口停止蓝牙搜索。

  // 第五步、 停止搜索stopBluetoothDevicesDiscovery(){wx.stopBluetoothDevicesDiscovery({success: function(res) {console.log('停止搜索成功');},fail: function(res) {console.log('停止搜索失败');}});}

其中,devices在data中定义如下:

  data: {devices: []},

3、测试

选择整机调试,效果图如下:

在这里插入图片描述

在这里插入图片描述


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

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

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

相关文章

计算机网络——数据链路层

序言 问&#xff1a;数据链路层在现在的社会起到什么作用&#xff1f; 答&#xff1a;数据链路层在现在的社会起到关键性作用&#xff0c;比如&#xff1a;数据传输和通信&#xff1b;网络连接和互联互通&#xff1b;错误检测和纠正&#xff1b;媒体访问控制&#xff1b;网络性…

【图像处理】植物叶识别和分类

一、说明 这是国外某个学生团队尝试用机器学习方法对植物叶进行识别分类的实验。实验给出若干张植物叶图片&#xff0c;针对这些图片&#xff0c;对特征进行测量、提取、重组&#xff0c;最后用机器学习方法实现&#xff1b;该具备一定的参考价值。 现在是我们将图像处理学习应…

Python:使用prometheus-client提交数据到实现prometheus+ grafana数据监控

相关资料 prometheus文档&#xff1a;https://prometheus.io/grafana文档&#xff1a;https://grafana.com/grafana github: https://github.com/grafana/grafanaPyhton客户端https://pypi.org/project/prometheus-client/ 目录 1、使用Python提供数据源2、启动 prometheus3、…

基于高精度三维机器视觉的新能源汽车锂电池表面缺陷检测

​Part.1 行业背景 ​随着新能源汽车在全球范围内成为焦点发展领域&#xff0c;企业对电池质量控制和检测的要求也变得更加严格。在机器视觉行业迅速发展的背景下&#xff0c;市场上提供了功能强大且种类齐全的3D相机系列&#xff0c;可以满足锂电池从电芯到模组各个工艺和工位…

如何修改 Linux 的时区

文章结构 一、查看 Linux 当前时区二、获取时区 TZ 值&#xff08;可选做&#xff09;三、配置 TZ 值四、加载配置并检验是否生效 TZ 是 time zone 的缩写&#xff01; 一、查看 Linux 当前时区 你可以使用如下命令非常容易地就查看到 Linux 系统的当前时区&#xff1a; # 查…

Java 设计模式实战系列—工厂模式

在 Java 开发中&#xff0c;对象的创建是一个常见的场景&#xff0c;如果对象的创建和使用都写在一起&#xff0c;代码的耦合度高&#xff0c;也不利于后期的维护。我们可以使用工厂模式来解决这个问题&#xff0c;工厂模式是一个创建型模式&#xff0c;将对象的创建和使用分离…

【Visual Studio】使用 C++ 语言,配合 Qt,开发了一个串口通信界面

知识不是单独的&#xff0c;一定是成体系的。更多我的个人总结和相关经验可查阅这个专栏&#xff1a;Visual Studio。 文章目录 1. 获取串口名字1.1 文件 GUI.ui1.2 文件 GUI.h1.3 文件 GUI.cpp潜在 Bug&#xff1a;LN2019 2. 配置串口连接2.1 文件 GUI.ui2.2 文件 GUI.h2.3 文…

【C#】简单聊下Framework框架下的事务

框架用的多了&#xff0c;之前版本的事务都忘记了。本次简单聊下.net framework 4.8框架下本身的事务 目录 1、SqlClient2、TransactionScope3、引用 1、SqlClient 在 C# 中&#xff0c;使用 using 块可以方便地实现对资源的自动释放&#xff0c;但它不适用于实现事务处理。为…

一种基于linux内核双向链表的移植

1.简介 双向链表&#xff08;Doubly Linked List&#xff09;是一种常见的数据结构&#xff0c;由一系列的节点组成&#xff0c;每个节点都包含两个指针&#xff0c;分别指向前一个节点和后一个节点。与单向链表不同&#xff0c;双向链表可以在 O(1) 的时间复杂度内向前或向后遍…

虚拟机VMware+Ubuntu配置DPDK环境并运行Helloworld

虚拟机VMwareUbuntu配置DPDK环境并运行Helloworld 文章目录 虚拟机VMwareUbuntu配置DPDK环境并运行Helloworld安装虚拟机虚拟机中安装DPDK运行Helloworld 首先需要强调的是&#xff0c;版本的影响很大&#xff0c;有可能会因为版本不匹配而导致无法成功配置DPDK环境。 安装虚拟…

火山引擎 Iceberg 数据湖的应用与实践

在云原生计算时代&#xff0c;云存储使得海量数据能以低成本进行存储&#xff0c;但是这也给如何访问、管理和使用这些云上的数据提出了挑战。而 Iceberg 作为一种云原生的表格式&#xff0c;可以很好地应对这些挑战。本文将介绍火山引擎在云原生计算产品上使用 Iceberg 的实践…

Scrapy框架之认识MongoDB

目录 MongoDB 简介 特点 MongoDB的适用场景 MongoDB的行业具体应用 如何抉择是否使用MongoDB MongoDB 简介 MongoDB 是免费开源的跨平台 NoSQL 数据库&#xff0c;命名源于英文单词 humongous&#xff0c;意思是「巨大无比」&#xff0c;可见开发组对 MongoDB 的定位。…