前端调用蓝牙接口怎么设置

前端调用蓝牙接口怎么设置,第1张

我实现的小程序模块自动连接(根据需要,可改手动),是在小程序初始化完成时开始自动调用执行。
大致流程:
开启蓝牙适配;
获取蓝牙适配器状态,判断设备蓝牙是否可用;
判断蓝牙适配器可用时开启扫描蓝牙设备和开启获取已连接的蓝牙设备;
如果开启扫描蓝牙设备失败 5 s 后,自动再次开启扫描;
开启扫描蓝牙设备成功后,开启监听已扫描的设备;
如果已扫描到的新设备,包含特定名称规律,则开始连接该设备;
开启获取已连接蓝牙设备,成功后,连接包含特定名称规律的设备;
两者都无法搜索到相应设备,则等待 5 s,重新搜索;
开始连接某设备时停止扫描设备,停止循环获取已连接设备;
连接成功后停止扫描设备,停止循环获取已连接设备。
​下面,我们一步步来完成这个流程。
开始连接蓝牙设备
1 开启连接
appjs的onLaunch()方法里中,我们调用thisstartConnect();来开启连接,d出提示框,进行配对。如果失败,则提示设备蓝牙不可用,同时开启蓝牙适配器状态监听。
2 获取本机蓝牙状态
调用thisgetBluetoothAdapterState()获取本机蓝牙适配器状态,判断是否可用。若available为false,则为用户没有开启系统蓝牙。
同时,判断程序还没有开始搜索蓝牙设备,调用thisstartBluetoothDevicesDiscovery()开始扫描附近的蓝牙设备,以及thisgetConnectedBluetoothDevices(),获取本机已配对的蓝牙设备。
3 开始搜索新设备
开始搜索蓝牙设备startBluetoothDevicesDiscovery(),提示蓝牙搜索。
4 获取已配对的蓝牙设备
需要注意的是,参数services(Array)是必填的,但是官方示例中以及各种坑爹 demo 里从没见过有谁填写。不填写这个属性此方法,将无法获取到任何已配对设备。
如果要调用此方法,则代表需要连接特定设备,并且知道该设备的一个主服务serviceId。
如暂时不知道这个 ID,可以先手动连接一次想要连接的设备,然后获取service列表,记录属性primary为true的值至少一个。5 处理搜索功能开启失败的情况
如果搜索功能启动失败,回到第 2 步,重新检查蓝牙适配器。如果可用,开启蓝牙搜索功能并开启发现附近蓝牙设备事件监听:thisonBluetoothDeviceFound()。
此方法可自定义过滤一些无效的蓝牙设备,比如name为空的,或是产品开发中,需要过滤设备名称不含有特定规律字符串的设备。
6 自动配对设备
在第 5 步中发现了某个想配对的设备,则获取到该设备的deviceId,然后用thisstartConnectDevices()接口,开始配对该设备。
开启连接后,为了避免出现冲突,一旦开启连接,则需要终止扫描附近蓝牙设备、终止读取本机已配对设备
7 连接成功后握手
连接成功后,使用thisgetService(deviceId)接口,获取设备的所有服务。
8 读取服务的特征值
9 意外处理
如果扫描到的设备中没有想要连接的设备,可以尝试使用系统蓝牙手动配对,然后再小程序中调用getConnectedBluetoothDevices()获取本机已配对的蓝牙设备,然后过滤设备(可能获取多个已配对的蓝牙设备)。
然后,将已获取的蓝牙设备deviceId列表放入到一个数组中,然后调用自定义方法thisloopConnect();
思路:通过递归调用获取已配对蓝牙设备的,如果获取到了就去连接,如果devicesId[x]为空,说明上传调用时,获取到的已配对设备全部连接失败了。
这时候,我们需要则开启重新获取已配对蓝牙设备,并开启扫描附近蓝牙设备。
10 自动循环重试
startConnectDevices('loop', array)方法,是当获取已配对蓝牙设备进行连接时调用。
其中的处理逻辑上文已经贴出,意思就是在连接失败后fail方法里累加一个全局变量,然后回调loopConnect(array)方法。
11 手动连接
上文介绍的方法是为了直接自动连接,如果不需要自动连接,可使用方法getBluetoothDevices(),获取已扫描到的蓝牙设备的列表。
开发者可以做个页面显示出设备名,用户点击某个设备后,才开始连接。
需要注意的事项
thatserviceId是在初始化时设置的,由于对需要连接设备的主服务serivceId和各种特征值都是已知的,因此可以这样做。如果不可知,可以做一个扫描方法自己检查特征值的用途。
连接成功后的writeBLECharacteristicValue和openNotifyService *** 作需要注意,如果同时开启这两项 *** 作要先调用wirte再开启notify(原因未知,个人心得)。
3、经提醒,我发现还可以再完善一下在onBlueToothAdapterStateChange()监听蓝牙适配器状态,以此判断连接过程中、连接后用户开关了设备蓝牙。如果判断到关了蓝牙,发出开启蓝牙的提示;如果监听到开启了,就重新回到第 1 步。

Document Object Model文档对象模型(JS用document *** 作网页)

Application Programming Interface应用程序接口,是一些预先定义的接口(函数,>ajax
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

接口指可以通过服务端部署的机器提供出来的URL地址进行动态的数据交互,通常的工作流是后端跟前端协商定义数据接口格式形成文档,后端实现接口,前端做静态的mock,后端实现服务接口,两边都完成后集成联调,现在有swagger或者 apiairy等工具可以更简化这个过程。

$ajax({
type: "post/get",
url: "地址",
data: {
key: value
},
dataType: "json",
async: false/yrue,
success: function(e) {
alert(e);
}

用户使用 Web 客户端访问 Web 系统,系统在收到请求后执行 *** 作
(收集数据模型,选择数据经行组装),将结果返回给客户。

其中包括的元素和关系如下图所示:

约定

每个规范也会对应若干规定若干规则约定来指导前后端工程师的具体实施。

页面入口规范(范例)

同步数据规范(范例)

异步接口规范(范例)

通过 模拟数据 的形成,将前端本地开发与后端独立出来,
这样前端工程师就可以独立的进行本地的开发工作。

使用页面入口规范制定项目结构(配置信息,目录结构和模板结构),
此过程可以使用自动化工具自动完成。

根据同步数据规范可生成模拟数据的配置文件。(此部分通用可以使用自动化工具来完成)

根据异步接口规范生成模拟异步数据。

前端开发环境包含两个部分, 本地模拟服务器 本地代理

Local Server

根据请求规则进行匹配,然后生成(整合模板和模拟数据)所请求的页面

Local Proxy

拦截异步请求后,根据请求的匹配规则返回所请求的数据(例如 JSON 或 XML)。

前后端联调需要去除本地环境,在实际开发中只需要对配置文件进行调整既可
(控制哪些请求需要被本地服务器或代理拦截,哪些需要使用远程服务器)。

直连加不发布服务
DUBBO的配置属性里面对消费端提供了不从注册中心发现服务的机制,直接配置远程接口的地址,这样可以保证消费端连接到制定的环境接口。这样消费端是解决了问题,但是服务提供端呢?如上图的B1它即是消费端也是服务提供端,它提供A1所依赖的接口,那么如果B1将它的服务发布到注册中心里面(这里需要提醒,STABLE环境机制里面所有子环境公用一个注册中心),那么势必会导致stable环境里面的A会发现B1提供的服务?势必会导致stable环境的不稳定(stable环境的机制是stable环境只能进不能出,就是不能调用外部其他子环境的服务)?所以B1不能发布服务到注册中心,dubbo也提供了相关的配置属性来支持这一点。下面我例举出通过哪些配置可以实现这种方案:
服务消费端:
DUBBO在消费端提供了一个url的属性来指定某个服务端的地址
<!--lang:xml-->
<dubbo:reference interface="comalibabadubbodemoHelloWorldService" check="false" id="helloWorldService"/>
默认的方式是从注册中心发现接口为comalibabadubbodemoHelloWorldService的服务,但是如果需要直连,可以在dubboproperties下面配置dubboreferencehelloWorldServiceurl=dubbo://ip:port/comalibabadubbodemoHelloWorldService可以通过配置dubboreferenceurl=dubbo://ip:port/来让某个消费者系统的服务都指向制定的服务器地址(关于配置信息可以参考《DUBBO配置规则详解》)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13395578.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存