MASA MAUI Plugin IOS蓝牙低功耗(三)蓝牙扫描

本文介绍了如何使用MASA Maui Plugin在iOS上开发蓝牙低功耗(BLE)功能,包括CBCentralManager的使用、扫描外围设备、权限检查与请求,以及在Swift中参考Apple官方文档实现相关功能。文章详细讲解了开发步骤,如初始化CBCentralManager,处理扫描和状态更新,以及如何打包成nuget包供其他项目使用。
摘要由CSDN通过智能技术生成

项目背景

MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI 是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补充和扩展,
项目地址:https://github.com/BlazorComponent/MASA.Blazor/tree/main/src/Masa.Blazor.Maui.Plugin

每个功能都有单独的demo演示项目,考虑到app安装文件体积(虽然MAUI已经集成裁剪功能,但是该功能对于代码本身有影响),届时每一个功能都会以单独的nuget包的形式提供,方便测试,现在项目才刚刚开始,但是相信很快就会有可以交付的内容啦。

前言

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。

介绍

之前两篇文章我们实现了安卓蓝牙BLE的相关功能,本文我们将IOS的BLE功能实现一下。
,考虑到Swift语法对于c#开发人员更友好,本文示例代码参考Swift,相关代码来自苹果开发者官网
https://developer.apple.com/documentation

开发步骤

修改项目

Masa.Blazor.Maui.Plugin.Bluetooth项目中的Platforms->iOS文件夹下,添加一个部分类MasaMauiBluetoothService,在安卓中有BluetoothManager,在ios中对应的是CBCentralManager,但是不同有安卓还有个适配器Adapter的概念,在ios中关于设备扫描、连接和管理外围设备的对象,都是通过CBCentralManager直接管理的,我们看一下他的初始化方法

init(
    delegate: CBCentralManagerDelegate?,
    queue: DispatchQueue?,
    options: [String : Any]? = nil
)

delegate:接收中心事件的委托。相当于我们在安装中实现的DevicesCallback

queue:用于调度中心角色事件的调度队列。如果该值为 nil,则中央管理器将使用主队列分派中心角色事件。这个我们可以简单的理解为和安卓的UI线程或者后台线程对应,更详尽的说明请参考
https://developer.apple.com/documentation/dispatch/dispatchqueue

options:配置信息,我们这里只用到了ShowPowerAlert,代表蓝牙设备如果不可用,给用户提示信息。就好比你用了不符合标准的数据线,iphone会给你提示是一个意思。

 public static partial class MasaMauiBluetoothService
    {
   
        private static BluetoothDelegate _delegate = new();
        public static CBCentralManager _manager = new CBCentralManager(_delegate, DispatchQueue.DefaultGlobalQueue, new CBCentralInitOptions
        {
   
            ShowPowerAlert = true,
        });
        private sealed class BluetoothDelegate : CBCentralManagerDelegate
        {
   
            private readonly EventWaitHandle _eventWaitHandle = new(false, EventResetMode.AutoReset);

            public List<BluetoothDevice> Devices {
    get; } = new();

            public void WaitOne()
            {
   
                Task.Run(async () =>
                {
   
                    await Task.Delay(5000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值