c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...

我想到了。 我走在正确的轨道上。

使用以下连接后:

var dev = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);

您需要执行自定义配对:

var prslt = await device.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ProvidePin, DevicePairingProtectionLevel.None);

但这只会给您一个错误。 您还必须创建device.DeviceInformation.Pairing.Custom.PairingRequested事件处理程序。

所以我创建了这个处理程序:

private void handlerPairingReq(DeviceInformationCustomPairing CP, DevicePairingRequestedEventArgs DPR)

{

//so we get here for custom pairing request.

//this is the magic place where your pin goes.

//my device actually does not require a pin but

//windows requires at least a "0". So this solved

//it. This does not pull up the Windows UI either.

DPR.Accept("0");

}

在PairAsync调用之前将其连接起来,例如:

device.DeviceInformation.Pairing.Custom.PairingRequested += handlerPairingRequested;

连接我的BlueToothAdvertisementWatcher代码的示例代码:

private BluetoothLEAdvertisementWatcher BTWatch = new BluetoothLEAdvertisementWatcher();

private void Inits()

{

BTWatch.Received += new TypedEventHandler(BtAddRx);

BTWatch.Start();

}

private async void BtAddRx(BluetoothLEAdvertisementWatcher bw, BluetoothLEAdvertisementReceivedEventArgs args)

{

GattCommunicationStatus srslt;

GattReadResult rslt;

bw.Stop();//Stop this while inside.

device = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);

if (device.DeviceInformation.Pairing.IsPaired == false)

{

/* Optional Below - Some examples say use FromIdAsync

to get the device. I don't think that it matters. */

var did = device.DeviceInformation.Id; //I reuse did to reload later.

device.Dispose();

device = null;

device = await BluetoothLEDevice.FromIdAsync(did);

/* end optional */

var handlerPairingRequested = new TypedEventHandler(handlerPairingReq);

device.DeviceInformation.Pairing.Custom.PairingRequested += handlerPairingRequested;

log("Pairing to device now....");

var prslt = await device.DeviceInformation.Pairing.Custom.PairAsync(DevicePairingKinds.ProvidePin, DevicePairingProtectionLevel.None);

log("Custom PAIR complete status: " + prslt.Status.ToString() + " Connection Status: " + device.ConnectionStatus.ToString());

device.DeviceInformation.Pairing.Custom.PairingRequested -= handlerPairingRequested; //Don't need it anymore once paired.

if (prslt.Status != DevicePairingResultStatus.Paired)

{ //This should not happen. If so we exit to try again.

log("prslt exiting. prslt.status=" + prslt.Status.ToString());// so the status may have updated. lets drop out of here and get the device again. should be paired the 2nd time around?

bw.Start();//restart this watcher.

return;

}

else

{

// The pairing takes some time to complete. If you don't wait you may have issues. 5 seconds seems to do the trick.

System.Threading.Thread.Sleep(5000); //try 5 second lay.

device.Dispose();

//Reload device so that the GATT services are there. This is why we wait.

device = await BluetoothLEDevice.FromIdAsync(did);

}

var services = device.GattServices;

//then more code to finish it up.

}

如果您想断开连接,请使用:

await device.DeviceInformation.Pairing.UnpairAsync();

抱歉,代码混乱。 如果发现有人有用或有疑问,请告诉我。 我在任何地方都找不到此代码的任何WinForm示例。 实际上,在没有UI的情况下,我找不到任何代码来显示如何与PIN配对。 因此,我希望这对任何可能陷入困境的人有所帮助。

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

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

相关文章

python字典求平均值_Python - 字典中各个键的每个值的均值

我在跨整个字典进行迭代时遇到问题,无法对键的值中的每个元素进行简单的汇总统计(平均值)。Python - 字典中各个键的每个值的均值 我的字典由那些号码清单键和值: test_dict{NJ:[20,50,70,90,100],NY:[10,3,0,99,57],CT:[90,1000,…

数字填图问题matlab上机实验报告,数学建模实验报告数字填图问题

数字填图问题一、实验目的及意义本实验旨在通过生活中几个常见的数字填图问题的探究,探究这类问题的逻辑推理解法和计算机解法.二、实验内容1. 数字填图的逻辑推理;2. 数字填图的计算机解法。三、实验步骤1.开启软件平台——MA TLAB&#xff…

c++ 函数指针_进化论——从函数指针到被结构封装的函数指针及参数的应用举例...

↑↑↑ 点击上方公众号名称关注,不放过任何转变的机会。✎ 编 者 悟 语借口再小也会瓦解人的意志。文 章 导 读今天带大家用下函数指针,然后将函数指针和函数参数封装到结构体中,接着将数据用动态分配和静态分配的方式赋值给相应的函数&#…

domino流程图_OA实施工程师一线解读Java与Domino优劣

南宁OA软件泛微运营中心云腾为您分享:作为企业的CIO,不仅要面对企业内部的各类需求,还需要管理理念以及对市面上的信息化系统和技术了如指掌,否则很有可能在自己的职业生涯中划上遗憾的一笔。固然是吃一堑长一智,但谁不…

oracle中packages使用,oracle中packages的使用

最近,由于开发的功能较多,对于编写的很多过程,看着英文名字觉得挺熟悉,但要看功能,则需要每个点开去开备注或者代码,觉得很是郁闷。突见packages,想将所有写的过程放到一起,这样下次…

python怎么做软件界面_python – 如何自定义桌面应用程序的标题栏和窗口

我如何自定义标题栏(包括:关闭,最大化,最小化按钮,标题)和用PyQt编写的桌面应用程序框架,使其看起来像下面的图像?我需要一种方法来指定我想用于标题栏元素的颜色(按钮,文本标题和条形和按钮的背景颜色).我需要更改其窗口的代码: import sys …

树莓派存储方案_如何增加树莓派的存储量

大多数人仅使用8GB SD卡来运行Raspberry Pi。但这真的够了吗?如果您需要更多空间怎么办?这是通过删除不需要的软件包或简单地添加存储来在Raspbian上腾出更多空间的方法。使用更大的microSD卡您应该考虑在Raspberry Pi上增加空间的第一个选择是更大的SD卡…

linux中进程优先级,linux下调整进程优先级

linux下调整进程优先级进程的优先级决定了进程是否优先被cpu分配资源进行处理。在cpu资源十分充足时,每个正在运行的进程都能分配到足够的资源进行处理,此时调整进程的优先级是没有什么意义的;如果cpu资源紧张时,top查看cpu使用达…

华为交换机 查ip冲突_交换机如何解决IP地址冲突?

如何防止IP地址冲突故障?这个在实际项目中经常会遇到,网络用户如果没有按照规定设置IP地址的话,IP地址冲突现象就不可避免,一旦这种现象频繁发生,不但会影响上网效率,而且也不利于局域网网络的稳定运行。为…

python绘制社会关系网络图_Python networkx 网络图绘制

简单演示import networkx as nx import matplotlib.pyplot as plt # 定义空图 g nx.Graph() # 增加节点 g.add_node(1) g.add_node(A) g.add_nodes_from([2, 3]) g.add_edge(2, 3) g.add_edges_from([(1, 2), (1, 3)]) nx.draw(g, with_labelsTrue) plt.show() 一次增加多个点…

查看LINUX放开端口,linux如何查看端口是否开放?

在linux中我们可以通过在命令行中使用lsof命令、netstat命令来检查端口是否开放。方法一:使用lsof命令我们可以使用lsof命令来检查某一端口是否开放,基本语法如下:lsof -i:端口号如果没有任何输出则说明没有开启该端口号下图以80端口和53端口…

vue如何把数组转为json数组_vue.js,_vuejs Ajax取得一个数据json数组,vue.js - phpStudy...

vuejs Ajax取得一个数据json数组vuejs Ajax取得一个数据json数组后,要通取回的数据再做判断一定只能通这种方式或者 套template标签{{item.displayWords}}{{item.displayWords}}或者{{item.displayWords}}{{item.displayWords}}这样才行吗??&…

python数据处理框架_python 最快 web 框架 Sanci 快速入门

简介 Sanic 是一个和类Flask 的基于Python3.5的web框架,它编写的代码速度特别快。 除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码。 关于 asyncio 包的介绍&…

linux tcp ip c,Linux下TCP/IP编程--TCP实战(select)

本文参考自徐晓鑫《后台开发》,记录之。一、为什么要使用非阻塞I/O之select初学socket的人可能不爱用select写程序,而习惯诸如connect、accept、recv/recvfrom这样的阻塞程序。当让服务器同时为多个客户端提供一问一答服务时,很多程序员采用多…

mybatis 取查询值_Mybatis --- 映射文件、参数处理、参数值的获取、select元素

这样就可以在insert函数中获取新添加的用户的 id主键,否则获取不到select * from student where id #{id}insert into student(name,password,email) values(#{name},#{password},#{email})编写测试单元:private EmployeeMapper mapper null;private S…

单片机8×8点阵显示简单汉字的程序_干货 | 浅析单片机制作贪吃蛇游戏

为了让大家更深入地了解底层的原理,在讲解时特意选择了51单片机(而非STM系列),另外16*16点阵由译码器和移位缓存器直接驱动(而非MAX系列芯片),摇杆也利用ADC功能判断方向。那如何让单片机驱动这256个点呢?直接用IO口驱动显然不够且…

怎样在linux中创建硬盘,在linux中添加新硬盘并创建LVM组

1、以虚拟机为例,给虚拟机添加一块新硬盘,并创建LVM组,将新硬盘用于存放oracle数据库文件。2、fdisk -ll查看新添加的硬盘是否被识别,如图已经识别出sdb。3、# pvcreate /dev/sdb (创建PV,相当于win中将基础磁盘转换…

python 输入框查询_Element输入框带历史查询记录

需求描述页面的查询框增加一下显示历史查找记录实现及踩坑记录使用Element带输入建议的输入框来实现此需求。用法详见官网1. 坑1:不能直接在querySearch里返回数组,一定要调用回调函数cb来处理数据看了一下例子,建议列表应该是个数组&#xf…

双代号网络图基础算法_软考网络工程师之系统开发和运行基础(软件分类、测试、模型)...

系统开发和运行基础(软件的分类、软件生存周期、软件开发模型、软件测试、软件项目管理)软件的分类系统软件,如操作系统。支撑软件,如开发工具。应用软件,如office。实时处理软件,一般是工业软件。软件生存周期1、软件定义问题定义…

linux怎么添加更新源,在Deepin 15.7系统中不需要在/etc/apt/sources.list添加更新源

Deepin 15.7和其他的Linux发行版在添加/etc/apt/sources.list更新源上明显不同,比如Ubuntu 18.04可以往该文件中添加国内的高速更新源,如Ubuntu 18.04更换国内高速源一文介绍的,而在Deepin 15.7系统中的/etc/apt/sources.list手动添加更新源后…