当前位置: 首页 > news >正文

icann官方网站jsp网站开发框架

icann官方网站,jsp网站开发框架,桂林网站优化公司,上海注册公司注册资本在开发MAUI应用程序时#xff0c;蓝牙协议的应用是一个重要的环节#xff0c;尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得#xff0c;希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准#x… 在开发MAUI应用程序时蓝牙协议的应用是一个重要的环节尤其是在需要与外部设备如智能跳绳进行数据交换的场景中。以下是我在开发过程中的一些经验和心得希望能为你的项目提供帮助。 1. 蓝牙协议基础 蓝牙协议是无线通信的一种标准允许设备之间进行短距离的数据交换。在MAUI开发中我们主要关注的是BLEBluetooth Low Energy低功耗蓝牙协议它以其低功耗和低成本的特点被广泛应用于智能设备中。 2. 使用Ble蓝牙助手 在开发过程中我使用了“BLE蓝牙助手”这款应用来辅助调试和理解蓝牙协议。这款应用可以帮助我们扫描周围的BLE设备查看设备的信号强度RSSI连接设备并查看服务和特征。通过这个工具我们可以更直观地理解BLE协议的工作原理和数据交换过程。 3. MAUI中的蓝牙开发 MAUI.NET Multi-platform App UI是一个跨平台框架它允许开发者使用C#和XAML创建跨平台的移动和桌面应用。MAUI以其性能优异、可扩展性强和结构简单而受到开发者的青睐。在本次开发中MAUI作为主要的开发框架提供了丰富的控件和API使得与蓝牙设备的对接成为可能。 MAUI支持多种平台包括Android、iOS、macOS和Windows这为开发跨平台应用提供了极大的便利。在本项目中我们将重点利用MAUI的跨平台特性开发一款能够在不同操作系统上运行的跳绳计数应用。 在MAUI中我们可以通过Plugin.BLE来实现蓝牙功能。以下是一些关键步骤 3.1 扫描设备 首先我们需要扫描周围的BLE设备。在MAUI中我们可以使用以下代码来启动扫描 await CurrentAdapter.StartScanningForDevicesAsync();public async Taskbool StartScanAsync(){//检查获取蓝牙权限bool isPermissionPass await CheckAndRequestBluetoothPermission();if (!isPermissionPass)return false;// 在使用之前确保 _scanForAedCts 已经被实例化ListDevice.Clear();try{if(CurrentAdapter null){CurrentAdapter CrossBluetoothLE.Current.Adapter;}await CurrentAdapter.StopScanningForDevicesAsync();CurrentAdapter.DeviceDiscovered Adapter_DeviceDiscovered;CurrentAdapter.ScanTimeoutElapsed Adapter_ScanTimeoutElapsed;//蓝牙扫描时间CurrentAdapter.ScanTimeout 30 * 1000;//默认LowPowerCurrentAdapter.ScanMode Plugin.BLE.Abstractions.Contracts.ScanMode.LowPower;Debug.WriteLine($开始扫描外设, IsAvailable{CrossBluetoothLE.Current.IsAvailable}, IsOn{CrossBluetoothLE.Current.IsOn}, State{CrossBluetoothLE.Current.State}, ScanMode{CurrentAdapter.ScanMode}, ScanTimeout{CurrentAdapter.ScanTimeout});await CurrentAdapter.StartScanningForDevicesAsync(cancellationToken: _scanForAedCts.Token);Debug.WriteLine($结束扫描外设);}catch (OperationCanceledException){Debug.WriteLine($扫描外设任务取消);}catch (Exception ex){Debug.WriteLine($扫描外设出错, {ex.Message});}finally{CurrentAdapter.DeviceDiscovered - Adapter_DeviceDiscovered;CurrentAdapter.ScanTimeoutElapsed - Adapter_ScanTimeoutElapsed;//_scanForAedCts.Dispose();}return true;}在扫描过程中我们可以通过DeviceDiscovered事件来获取发现的设备信息。 3.2 连接设备 一旦找到目标设备我们就可以建立连接。在MAUI中连接设备的过程如下 await CurrentAdapter.ConnectToDeviceAsync(device, new ConnectParameters(false, true));/// summary/// 连接设备/// /summary/// param nameuuid/param/// returns/returnspublic async TaskIDevice? ConnectDeviceAsync(Guid uuid){try{if (CurrentAdapter null){CurrentAdapter CrossBluetoothLE.Current.Adapter;}var connectedDevices CurrentAdapter.ConnectedDevices;if (connectedDevices.Count 0){// 至少有一个设备已经连接foreach (var device in connectedDevices){// 可以在这里处理每个已连接的设备if (device.Id uuid){await StartNotify(device);return device;}Console.WriteLine(device.Name);}}else{try{using (var cts new CancellationTokenSource(TimeSpan.FromSeconds(15))){var device await CurrentAdapter.ConnectToKnownDeviceAsync(uuid, default(ConnectParameters), cts.Token);await StartNotify(device);return device;}}catch (Exception ex) { Debug.WriteLine($蓝牙连接设备失败, {ex.Message}); }}}catch(Exception ex){Debug.WriteLine($蓝牙连接设备失败, {ex.Message});}return null;}这里device是我们通过扫描得到的设备对象ConnectParameters用于设置连接参数。 3.3 获取服务和特征 连接成功后我们可以获取设备提供的服务和特征这对于数据交换至关重要 var services await device.GetGattServicesAsync(); 3.4 数据读写 通过获取的特征我们可以进行数据的读写操作。例如读取跳绳的次数和时间 var characteristic services.First().GetCharacteristics().First(); var readResult await characteristic.ReadValueAsync();/// summary/// 读取数据/// /summary/// param namecharacteristic/param/// returns/returnspublic async Taskbyte[]? ReadDataAsync(ICharacteristic characteristic){//根据Plugin.BLE要求在主线程读写数据var result await MainThread.InvokeOnMainThreadAsync(async () {try{//读取数据var ary await characteristic.ReadAsync();Debug.WriteLine($读取成功长度{ary.data.Length});return (ary.data);}catch (Exception ex){Debug.WriteLine($读取错误, 目标设备蓝牙连接状态{BleDevice?.State}, {ex.Message});return null;}});return result;}/// summary/// 读取蓝牙设备数据/// /summary/// param nameguid/param/// returns/returnspublic async Taskbyte[]? ReadDataAsync(IDevice device){var service await device.GetServiceAsync(new Guid(0000180D-0000-1000-8000-00805F9B34FB));if (service ! null){var characteristic await service.GetCharacteristicAsync(new Guid(00002A37-0000-1000-8000-00805F9B34FB));if (characteristic ! null){var ary await characteristic.ReadAsync();return (ary.data);}}return null;}/// summary/// 写入蓝牙设备数据/// /summary/// param namedevice/param/// param nameary/param/// returns/returnspublic async Taskint SendDataAsync(IDevice device, byte[] ary){var service await device.GetServiceAsync(_serviceUuid);if (service ! null){var characteristic await service.GetCharacteristicAsync(_characteristicUuid);if (characteristic ! null characteristic.CanWritetrue){return await characteristic.WriteAsync(ary);}}return 0;}3.5事件订阅 通过获取的特征我们可以进行数据的通知操作。 #region 订阅事件private async Taskint StartNotify(IDevice device){try{var service await device.GetServiceAsync(_serviceUuid);if (service ! null){var notifyCharacteristic await service.GetCharacteristicAsync(_characteristicUuid);if (notifyCharacteristic.Properties.HasFlag(CharacteristicPropertyType.Notify)){// 特性支持通知// 订阅事件notifyCharacteristic.ValueUpdated NotifyCharacteristic_ValueUpdated;// 启用通知await notifyCharacteristic.StartUpdatesAsync();}}}catch(Exception ex){}return 0;}// 处理特性值更新事件private void NotifyCharacteristic_ValueUpdated(object sender, Plugin.BLE.Abstractions.EventArgs.CharacteristicUpdatedEventArgs e){// 处理特性值更新NotifyQueue.Enqueue( e.Characteristic.Value);// ...}public async Taskbyte[]? ReadNotify(IDevice device){if (device.IsConnectable true){if (NotifyQueue.Count 0){return NotifyQueue.Dequeue();}}return null;}private async Taskint StopNotify(IDevice device){var service await device.GetServiceAsync(_serviceUuid);if (service ! null){// 获取服务和特性var notifyCharacteristic await service.GetCharacteristicAsync(_characteristicUuid);if (notifyCharacteristic.Properties.HasFlag(CharacteristicPropertyType.Notify)){// 特性支持通知// 订阅事件notifyCharacteristic.ValueUpdated - NotifyCharacteristic_ValueUpdated;// 启用通知await notifyCharacteristic.StopUpdatesAsync();}}return 0;}#endregion 4. 跳绳设备对接实践 在实际对接跳绳设备时我们需要根据设备的技术文档来确定服务和特征的UUID。一旦确定就可以按照上述步骤进行连接和数据交换。例如读取跳绳次数的特征可能有一个特定的UUID我们可以通过这个UUID来读取或写入数据。 5. 注意事项 确保在开发过程中手机的蓝牙功能处于开启状态。在配对设备时确保手机与跳绳设备的距离足够近以保证信号的稳定性。在读取和写入数据时要注意数据格式和编码方式确保数据的正确解析。 通过上述步骤和注意事项可以在MAUI中顺利实现与BLE设备的对接记录跳绳的次数与时间。希望这些经验能够帮助你在开发过程中少走弯路快速实现功能
http://www.hkea.cn/news/14586004/

相关文章:

  • 网站优化建设哈尔滨网站怎么设置404页面
  • 西宁做网站的有吗怎么样做seo
  • 慕枫宁波网站建设深圳企业年报
  • 校园网站建设需要哪些百度网盘手机app下载安装
  • 德州网站建设推广广东广州重大新闻
  • 专业做装修的网站wordpress 页面禁止评论
  • o2o手机网站源码买空间域名做网站
  • led动态视频网站建设婚礼策划
  • 网站建设属于应用软件吗拼多多网店
  • 广州市网站制作添加网站栏目的步骤
  • 九江建网站多少钱随州网站推广哪家专业
  • 网站建设方案哪家好 推荐计算机编程代码大全
  • 如何注册公司名称西安官网seo技巧
  • 网站建设衤金手指下拉10优设网页设计
  • 域名备案中网站负责人wordpress看流量
  • 网站seo多少钱广州做网站设计
  • 江苏省住房和城乡建设厅政务网站玉雕网站建设
  • 长沙网站开发智能wordpress分类名称不显示
  • 自己可以做网站中国工商注册网官网
  • 招聘网站的简历可以做几份龙岩建筑网
  • 织梦珠宝网站模板深圳有几个区县
  • 网站备案基础知识镇江网站建设远航网络
  • 宝安建设网站公司公司网站建设 费用
  • 申请网站空间是申请域名吗7k7k电脑版网页游戏
  • 厦门建设工程招标中心的网站wordpress采集淘客
  • 无锡网站建设服务公司网站怎么做移动图片不显示不出来
  • 网站维护常识网站开发者模式下载视频教程
  • 网站版权 备案icp深圳企业500强
  • 外贸常用社交网站有哪些电大亿唐网不做网站做品牌
  • 用excel做网站做网站需要申请专利吗