使用flutter控制蓝牙通讯_使用Flutter控制蓝牙通讯
该教程介绍了如何使用Flutter框架开发一个蓝牙通信应用。主要内容包括:1. 设置开发环境:安装必要的依赖项(如flutterblue),并配置Android和iOS项目的相关设置。2. 扫描和连接蓝牙设备:通过MyHomePage类实现扫描未连接的蓝牙设备,并将已连接的设备添加到列表中。3. 显示服务信息:创建一个视图显示连接蓝牙设备的服务列表,并提供按钮以读取、写入和接收通知。4. 实现功能: - 读取和写入设备服务 - 处理特征值变化时的通知 - 使用dart语言将数据转换为字节数组教程提供了完整的源码,并附有相关工具和资源链接。
基础理论教学视频课程
Dart与Flutter:一个详尽的开发者参考文档 - 国外课栈 viadean.com
Flutter主要依赖于Firestore来开发或构建复杂的应用场景或功能在Android和iOS平台上
Flutter的具体应用 - 国外学习平台 . viadean . com
希望用蓝牙与物联网设备互动,却无法在其内部运行任何软件?本教程将指导您通过蓝牙实现移动设备与物联网设备的通信。无论是Android还是iOS系统都可以实现这一目标?我们的目标是开发一个基于nRF平台的智能连接灯,在此平台上我们可以轻松完成配对、扫描、数据读取与存储等功能。
项目引入外部组件
...
优化Android设备上应用最小API版本设置为...
Android {
defaultConfig {
name: Default configuration
description: 此为默认配置设置。
parameters:
其中$c1=10$,
$c2=20.5$,
$c3=\text{true}$。
必要参数包括$c1$与$c2$两个变量。
可选附加选项中:
optionA被禁用,
optionB未设置。
}
version: 4.3
minSdkVersion值为:19
启用蓝牙连接权限
为了更好地连接蓝牙设备并获取设备地理位置信息权限:
Android(安卓系统)是一种由Google公司开发的开源操作系统。
在AndroidManifest.xml文件中增加
...
ios
为了方便管理应用程序偏好设置,请在Info.plist文件中包括:
...
启动流程
import 'package:flutter/material.dart';
...
我们可以通过借助_MyHomePageState_小部件内的widget.flutterBlue_属性来获取该小部件。
进行蓝牙信号扫描操作以识别和连接至目标蓝牙设备
启动蓝牙扫描服务,并将结果展示至ListView中。
首要,在本类中我们引入了一个设备列表。
...
在此_MyHomePage类中实现一个新功能的方法,并将其命名为FillListItems();该方法将负责为列表添加相关内容。
...
在此时,在_MyHomePage的initState方法内部启动扫描过程来填充相关信息。
请注意,在启动扫描操作时,系统只会显示尚未与FlutterBlue实例建立连接的设备列表。然而,为了确保全面性,系统会进一步调用该FlutterBlue实例的connectedDevices属性来补充并整合这些已连接的信息。
...
现在,我们的列表将基于FlutterBlue扫描的结果进行设备填充
按照所述方案,在deviceList中组装ListView:
...
将此listView配置为主支架的主体:
...
目前附近具备蓝牙支持的设备列表能够被我们获取。随后的操作将涉及选择一个设备并展示其可提供的服务信息以及相关的特性。
通过连接设备后,系统会展示特定功能的服务
为了提高可读性, 我们决定不再创建新的视图. 而是将对当前的内容进行修改, 使其依赖于是否已连接设备的状态. 为此, 需要编写一个函数模块, 该模块将返回相应的视图信息.
因而,在MyHomePageState中我们应该增添一项表示要连接的设备状态及其公开的服务列表
...
函数:
...
_buildConnectDeviceView方法目前尚未进行任何具体操作,并且其主要功能集中在基础架构的搭建阶段
...
本系统采用的方法将返回此_buildView:
...
最后,在onPressed方法中加入相应的逻辑代码,在此过程中需要让FlutterBlue停止扫描当前设备,并连接到目标设备后将其状态设置为 previously established的状态_connectedDevice。随后通过获取目标设备的服务信息,并展示相关服务列表。
...
该组件的构建功能及实现细节如下所述:
...
显示特性
现有可访问的服务列表已准备就绪。我们将展示每个服务的具体信息,并根据能否读取、撰写内容及通知相关功能的情况来决定按钮的位置。
我们现在开发的 _buildConnectDeviceView 现在呈现为以下形式:
...
然后增添一个运算装置的功能模块
...
当前的结果:您需要将资源分配到各个项目中以确保项目的顺利推进,请查看文档中的具体安排
该系统能够自动获取、提交以及收集来自特征的通知
最后一阶段是在对读取操作、数据写入操作以及触发事件的按钮上实现相应的逻辑处理流程。
我们将先添加一个Map来根据属性组织我们的数据,并将其存储起来以便展示
改写说明
...
然后在_buildConnectDeviceView方法中插入一个新行以呈现我们的值:
...
系统自动获取并处理文件数据
建议我们在读取按钮的onPressed方法时加入逻辑代码。
...
在这里, 我们首先检测特征值的变化, 并将其新值记录在预先构建的映射表中. 然后系统会更新视图, 并将更新后的数值进行展示.
撰写
详细描述:根据用户的要求,在不改变原意的前提下对文本进行同义词替换和句式调整以降低重复率
目标是实现对设备的数据发送。我们计划在对话框中新增一个TextField字段,并将其与系统进行连接以确保数据传输。
为此目的,请为_MyHomePageState注册一个控制器:
...
通过输入字段的onclick事件来实现我们的对话框生成过程。
...
由此可见,我们可以通过将输入值传递到特征,并对其进行write操作来实现目标。接着借助dart语言中的convert方法将结果转换为字节数组。
通知
通知仅仅是在每次处理过程中完成特征值更新的触发机制:
...
每当此特征的值发生变化时,都会被通知到,并且这同样会更新UI中的值
现在我们拥有一个完整的应用程序它能够通过蓝牙技术实现对设备的扫描支持为各个蓝牙设备建立连接方便查看提供的服务自动获取各项数据值定期更新其状态信息并及时通知用户当数据发生变动
完整的原始代码
通过Flutter实现蓝牙通信的管理
