*** 作方法
01、开始-所有程序-我的蓝牙位置。搜索有效范围内的蓝牙设备。
02、选择要连接的蓝牙设备,再点击Bluetooth设置向导。
03、d出设置PIN代码界面。
04、设置PIN代码并等待外部蓝牙设备输入代码。
05、可以使用了。
拓展资料:
数据传输可随时在主设备和其他设备之间进行(应用极少的广播模式除外)。主设备可选择要访问的从设备典型的情况是,它可以在设备之间以轮替的方式快速转换。因为是主设备来选择要访问的从设备,理论上从设备就要在接收槽内待命,主设备的负担要比从设备少一些。
01要进行蓝牙设置,肯定是要在手机设置程序当中设置的,点击打开手机主界面【设置】。
02进入手机设置界面以后,在常规栏的无线和网络菜单中,找到【蓝牙】并点击进入。
03进入蓝牙以后,这是的蓝牙状态是关闭的,要在蓝牙开启的状态才能进行设置,所以点击右上角开关键,将蓝牙开启。
04蓝牙开启以后,在开放检测栏目的右方点击开启,开启以后,即可被附近的.其他蓝牙设备搜索到,这样方便别人对你的连接。
05设置好开放检测后,点击界面右下角的【高级】,对蓝牙进行高级设置。
06这时会d出蓝牙高级设置,在蓝牙高级设置中点击第一项【检测超时设置】,这项设置可以选择你在连接过程中的检测时间,检测时间是用来自动断开蓝牙检测的,时间一过,别人就搜不到你了。
07第二项是蓝牙自动关闭设置,这一项设置是说,当你自己的蓝牙开启后,处于空闲状态下的等待时间,等待时间一过,蓝牙将会自动关闭,可以根据自己的喜好来设置。
08第三项设置是显示接受到的文件,这项设置是在下载完成后提示你接受到的文件名称,并且点击它还能查看你的下载文件目录,方便你进行查阅。
09当你一切都设置好以后呢,就可以选择你要连接的蓝牙了,当人不可能每次都这样设置一通才去连接蓝牙,蓝牙就记忆功能,当你要连接同一个蓝牙时,只需要在手机主界面的下拉菜单中打开蓝牙即可自动连接了。
特别提示
蓝牙传输非常的方便,特别是在没有网络的情况下,两个移动手机可以相互传输文件资源等,但请不要用于传输不良信息哦。
我实现的小程序模块自动连接(根据需要,可改手动),是在小程序初始化完成时开始自动调用执行。大致流程:
开启蓝牙适配;
获取蓝牙适配器状态,判断设备蓝牙是否可用;
判断蓝牙适配器可用时开启扫描蓝牙设备和开启获取已连接的蓝牙设备;
如果开启扫描蓝牙设备失败 5 s 后,自动再次开启扫描;
开启扫描蓝牙设备成功后,开启监听已扫描的设备;
如果已扫描到的新设备,包含特定名称规律,则开始连接该设备;
开启获取已连接蓝牙设备,成功后,连接包含特定名称规律的设备;
两者都无法搜索到相应设备,则等待 5 s,重新搜索;
开始连接某设备时停止扫描设备,停止循环获取已连接设备;
连接成功后停止扫描设备,停止循环获取已连接设备。
下面,我们一步步来完成这个流程。
开始连接蓝牙设备
1. 开启连接
app.js的onLaunch()方法里中,我们调用this.startConnect()来开启连接,d出提示框,进行配对。如果失败,则提示设备蓝牙不可用,同时开启蓝牙适配器状态监听。
2. 获取本机蓝牙状态
调用this.getBluetoothAdapterState()获取本机蓝牙适配器状态,判断是否可用。若available为false,则为用户没有开启系统蓝牙。
同时,判断程序还没有开始搜索蓝牙设备,调用this.startBluetoothDevicesDiscovery()开始扫描附近的蓝牙设备,以及this.getConnectedBluetoothDevices(),获取本机已配对的蓝牙设备。
3. 开始搜索新设备
开始搜索蓝牙设备startBluetoothDevicesDiscovery(),提示蓝牙搜索。
4. 获取已配对的蓝牙设备
需要注意的是,参数services(Array)是必填的,但是官方示例中以及各种坑爹 demo 里从没见过有谁填写。不填写这个属性此方法,将无法获取到任何已配对设备。
如果要调用此方法,则代表需要连接特定设备,并且知道该设备的一个主服务serviceId。
如暂时不知道这个 ID,可以先手动连接一次想要连接的设备,然后获取service列表,记录属性primary为true的值至少一个。5. 处理搜索功能开启失败的情况
如果搜索功能启动失败,回到第 2 步,重新检查蓝牙适配器。如果可用,开启蓝牙搜索功能并开启发现附近蓝牙设备事件监听:this.onBluetoothDeviceFound()。
此方法可自定义过滤一些无效的蓝牙设备,比如name为空的,或是产品开发中,需要过滤设备名称不含有特定规律字符串的设备。
6. 自动配对设备
在第 5 步中发现了某个想配对的设备,则获取到该设备的deviceId,然后用this.startConnectDevices()接口,开始配对该设备。
开启连接后,为了避免出现冲突,一旦开启连接,则需要终止扫描附近蓝牙设备、终止读取本机已配对设备
7. 连接成功后握手
连接成功后,使用this.getService(deviceId)接口,获取设备的所有服务。
8. 读取服务的特征值
9. 意外处理
如果扫描到的设备中没有想要连接的设备,可以尝试使用系统蓝牙手动配对,然后再小程序中调用getConnectedBluetoothDevices()获取本机已配对的蓝牙设备,然后过滤设备(可能获取多个已配对的蓝牙设备)。
然后,将已获取的蓝牙设备deviceId列表放入到一个数组中,然后调用自定义方法this.loopConnect()
思路:通过递归调用获取已配对蓝牙设备的,如果获取到了就去连接,如果devicesId[x]为空,说明上传调用时,获取到的已配对设备全部连接失败了。
这时候,我们需要则开启重新获取已配对蓝牙设备,并开启扫描附近蓝牙设备。
10. 自动循环重试
startConnectDevices('loop', array)方法,是当获取已配对蓝牙设备进行连接时调用。
其中的处理逻辑上文已经贴出,意思就是在连接失败后fail方法里累加一个全局变量,然后回调loopConnect(array)方法。
11. 手动连接
上文介绍的方法是为了直接自动连接,如果不需要自动连接,可使用方法getBluetoothDevices(),获取已扫描到的蓝牙设备的列表。
开发者可以做个页面显示出设备名,用户点击某个设备后,才开始连接。
需要注意的事项
that.serviceId是在初始化时设置的,由于对需要连接设备的主服务serivceId和各种特征值都是已知的,因此可以这样做。如果不可知,可以做一个扫描方法自己检查特征值的用途。
连接成功后的writeBLECharacteristicValue和openNotifyService *** 作需要注意,如果同时开启这两项 *** 作要先调用wirte再开启notify(原因未知,个人心得)。
3、经提醒,我发现还可以再完善一下在onBlueToothAdapterStateChange()监听蓝牙适配器状态,以此判断连接过程中、连接后用户开关了设备蓝牙。如果判断到关了蓝牙,发出开启蓝牙的提示;如果监听到开启了,就重新回到第 1 步。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)