app inventor跨界面连接蓝牙(二)

关于app inventor跨屏幕蓝牙不能使用的解决方法

前一个博客写的是一键SOS求救,但是当我们的app有多个屏幕时,蓝牙是不能在其他屏幕使用的(虽然切换到其他屏幕的时候蓝牙并没有断开)下面给出解决方法。

本博客是基于上一个博客的改良,有不懂得可以去看看上一个博客

先给Ardunio板上传程序来测试

void setup() {
  // put your setup code here, to run once:
    Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
   Serial.print("3");
   delay(1000);
}

下面是app inventor部分的代码块

屏幕1的代码块
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
屏幕2的代码块为:
在这里插入图片描述

### 实现App Inventor 2蓝牙BLE设备的连接App Inventor 2中实现与蓝牙BLE(低功耗蓝牙)设备的连接涉及多个组件和特定设置。为了成功建立这种连接并执行数据传输操作,开发者需遵循一系列配置步骤。 #### 组件准备 首先,在设计视图中添加必要的组件来支持BLE功能: - **BLEClient**:用于管理与其他BLE设备之间的交互。 - **Button** 和 **Label**:提供用户界元素以便于启动扫描过程以及显示状态信息。 - **ListPicker**:允许用户从已发现的服务列表中选择具体服务[^1]。 #### 初始化BLE客户端 当应用程序首次运行时,应该初始化`BLEClient`对象,并注册相应的事件处理程序以响应来自所选外围设备的消息或通知。这可以通过编写如下所示的过程完成: ```blockly when Screen1.Initialize do call BLEClient1.Initialize with "ble" end when ``` 此代码片段确保每次打开应用都会重新创建一个新的BLE会话实例[^2]。 #### 执行BLE设备扫描 为了让手机能够找到附近的BLE设备,可以调用内置的方法来进行主动搜索。通常情况下,这个动作会被绑定到某个按钮点击事件上,例如下的例子展示了如何通过按下名为“Scan”的按键触发一次为期30秒的扫描周期: ```blockly when Scan.Click do set LabelStatus.Text to "Scanning..." call BLEClient1.StartDiscovery with 30, "", "" end when ``` 一旦发现了匹配条件的新目标,则会在全局范围内广播一条消息给所有监听者;此时可以在对应的回调函数里进一步筛选感兴趣的装置并将它们展示出来供最终确认选择。 #### 建立连接并与选定设备配对 假设已经获取到了想要连接的目标ID(通常是MAC地址),那么就可以尝试发起正式握手请求了。这里给出了一种简单的方式去构建这样的逻辑结构——即每当有新的可用选项被加入到下拉菜单之后立即自动选取第一个条目作为默认值,并紧接着发出关联指令: ```blockly when ListPicker.AfterPicking do if not empty(ListPicker.Selection) then set SelectedDeviceId to first item of split(ListPicker.Selection,",") call BLEClient1.ConnectToDevice with SelectedDeviceId end if end when ``` 上述脚本不仅实现了基本的选择机制,还包含了错误预防措施以防意外情况发生时导致崩溃等问题出现[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值