MASA MAUI Plugin 安卓蓝牙低功耗(一)蓝牙扫描

项目背景

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技术来开发相应功能。

介绍

微软的MAUI并没有提供蓝牙低功耗设备的相关功能,而物联网开发中蓝牙低功耗是十分常见的,所以我们今天自己集成一个。
由于蓝牙功能设计的内容比较多,篇幅有限,本文只集成一个最基本的蓝牙扫描功能,意在抛砖引玉。后续会陆续更新其他蓝牙通讯功能的文章。本文蓝牙低功耗简称为BLE
如果你对BLE的相关概念不了解,可以参考 开发者官网链接: 蓝牙低功耗-安卓
https://developer.android.google.cn/guide/topics/connectivity/bluetooth-le/
本文JAVA相关代码均来自安卓开发者官网

开发步骤

新建项目

在vs中新建一个基于MAUI Blazor的项目MauiBlueToothDemo,然后添加一个MAUI类库项目Masa.Maui.Plugin.Bluetooth

添加权限

项目创建好了之后,我们首先介绍一下BLE需要的安卓权限,相信大家对各种APP首次打开的权限确认弹窗应该不会陌生。

在应用中使用蓝牙功能,必须声明 BLUETOOTH 蓝牙权限,需要此权限才能执行任何蓝牙通信,例如请求连接、接受连接和传输数据等。
由于 LE 信标通常与位置相关联,还须声明 ACCESS_FINE_LOCATION 权限。没有此权限,扫描将无法返回任何结果。
如果适配 Android 9(API 级别 28)或更低版本,可以声明 ACCESS_COARSE_LOCATION 权限而非 ACCESS_FINE_LOCATION 权限
如果想让应用启动设备发现或操纵蓝牙设置,还须声明 BLUETOOTH_ADMIN 权限。注意:如果使用 LUETOOTH_ADMIN 权限,则您必须拥有 BLUETOOTH 权限。
MauiBlueToothDemo项目中的AndroidManifest.xml添加权限,我们这里面向Android 9以上版本。

	<!--蓝牙权限-->
	<uses-permission android:name="android.permission.BLUETOOTH" />
	<!--让应用启动设备发现或操纵蓝牙设置-->
	<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
	<!-- 如果设配Android9及更低版本,可以申请 ACCESS_COARSE_LOCATION -->
	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Android 6.0之后,只在AndroidManifest.xml声明权限已经不够了,出于安全考虑,必须动态申请权限,也就是需要在使用特定功能之前提示用户进行权限确认。
我们在Masa.Maui.Plugin.Bluetooth项目的Platforms_Android下新建MasaMauiBluetoothService类,并添加一个内部类BluetoothPermissions ,MAUI的默认权限没有包含蓝牙低功耗,所以我们需要扩展一个自定义的蓝牙权限类,只要继承自 Permissions.BasePermission即可

        private class BluetoothPermissions : Permissions.BasePlatformPermission
        {
   
   
            public override (string androidPermission, bool isRuntime)[] RequiredPermissions =>
                new List<(string androidPermission, bool isRuntime)>
                {
   
   
                    (global::Android.Manifest.Permission.AccessFineLocation, true),
                    (global::Android.Manifest.Permission.Bluetooth, true),
                    (global::Android.Manifest.Permission.BluetoothAdmin, true),
                }.ToArray();
        }

我们在MasaMauiBluetoothService类内部添加一个方法,来实现动态获取权限

        public async Task<bool> CheckAndRequestBluetoothPermission()
        {
   
   
            var status = await Permissions.CheckStatusAsync<BluetoothPermissions>();

            if (status == PermissionStatus.Granted)
                return true;
            status = await Permissions.RequestAsync<BluetoothPermissions>();

            if (status == PermissionStatus.Granted)
                return true;
            return false</

相关推荐

MASA MAUI 预览Office文件

在线预览Office文件Api,拼接自己的office文件地址参数后在浏览器中访问即可达到预览效果。接下来我们按照这个思路在Maui中实现这个效果。本文主要介绍了如何在Maui下预览Office文件,并分享开发过程正踩过的坑以及对应的解决方案。希望能帮助到遇到同样需求问题的朋友。

MASAteam的博客 544

MASA MAUI iOS 文件下载与断点续传

是 iOS 中用于处理网络请求和数据下载的核心类之一。它提供了强大的功能,使应用程序能够与远程服务器通信、下载文件、上传数据等。本文我们借助中的来创建下载任务。下载任务直接将服务器的响应数据写入临时文件,在数据从服务器到达时为应用提供进度更新。在后台会话中使用下载任务时,即使应用处于挂起状态或未运行,这些下载也会继续。可以暂停(取消)下载任务,稍后再恢复它们(需要服务端支持)还可以恢复由于网络连接问题而失败的下载。

MASAteam的博客 764

MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇

上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况下通过添加测试手机的方式进行测试安卓平台的商店审核规则基本都是一致的,但是审核人员的标准和“仔细”程度不尽相同。vivo也提供了在线咨询客服的功能,国内商店基本都有在线人工客服,这点比App Store方便很多。这些审核相关的内容我们如果之前没有App的开发经验,可以提前学习一下,对开发和相关设计都是很有帮助的。

MASAteam的博客 641

MAUI+Masa Blazor APP 各大商店新手发布指南(二)小米篇

先说一下我们上架厂家应用商店的原因:除了方便用户下载之外,需要厂家的离线推送和微信内容分享等都需要上架应用商店(微信分享不上架有调用次数限制)。如果你的App需要在国内使用离线推送功能,也就是App不启动的场景下接收消息推送,那么你需要集成厂家的SDK,如果你使用了第三方推送,例如 极光、个推。

MASAteam的博客 591

MAUI+Masa Blazor APP 各大商店新手发布指南(一)App Store篇

作为新手App开发,iOS由于众所周知的原因,必须通过App Store下载安装App,所以通过App Store的审核是必须的(当然如果您有299美元一年的企业版证书可以走内部分发渠道的场景除外)。以下是我们首次使用MAUI+MASA Blazor开发App并上传App Store中遇到的审核意见和我们的解决方法,供MAUI新手开发参考。首先强调:1、App Store不需要软著。2、发布App Store需要确认证书为个人或者公司,企业证书是不能发布App Store的。

MASAteam的博客 827

MAUI+MASA Blazor 兼容性测试报告及分析

由于越来越多的Net开发者开始使用MAUI+Blazor的框架来开发移动端应用,我们决定对MASA Blazor组件在MAUI框架进行兼容性测试,以确保其在移动端App中的兼容性和稳定性。通过这次测试,我们的目标是验证MASA Blazor组件在MAUI框架下的表现,识别任何潜在的问题和缺陷,并提供改进和优化建议,以确保用户可以在各种移动设备上无缝使用该组件。MASA Blazor作为Blazor家庭中广受欢迎的组件,无论在PC端还是移动端都可以提供良好的交互与性能,并提供了大量移动端专用组件。

MASAteam的博客 1331

2023年北京.NET线下技术沙龙圆满落幕!

第三位嘉宾是代强老师,他是云联网信技术负责人、.NET开发者,从业五年,微信公众号【美男子玩编程】维护者之一,博客园【关关长语】HandyControl开源项目文档贡献者之一,多能力开发者。接下来是李国梁老师,他是公众号、博客园【yi念之间】的作者,拥有近10年的.NET开发经验,主导过多个大型TOB平台从0到1的架构设计,热衷于开源项目贡献。他的分享主题是“.NET在工业软件的应用实践”,通过实际案例和技术方案,让听众们深入了解了.NET在工业软件领域的应用和实践。

MASAteam的博客 431

北京.NET线下技术沙龙倒计时一天

(中关村智能制造创新中心)(距海淀黄庄地铁站100米)【地下停车场可停车】.NET技术沙龙活动与你不见不散。

MASAteam的博客 389

2023年北京.NET线下技术沙龙来了!大咖分享,还有精品好礼等你

MASA技术团队来北京啦!为了与北京的.NET开发者们更深入的交流学习,我们将在北京市举办一场.NET线下技术沙龙。同时也是希望通过举办这样的线下沙龙,让更多的.NET开发者了解我们,加入.NET开源技术生态,向更多的.NET开发者分享我们的理念。期间,我们邀请到的四位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。当然,我们也为大家准备了许多礼物,相信大家一定会喜欢,快来报名参加吧!2023年5月20日13:30-18:00。

MASAteam的博客 1064

使用MASA全家桶从零开始搭建IoT平台(三)管理设备的连接状态

获取一个设备的在线和离线状态,是一个很关键的功能。我们对设备下发的控制指令,设备处于在线状态才能及时给我们反馈。这里的在线和离线,我们可以简单的理解为设备与MQTT的连接状态。

MASAteam的博客 1313

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

以上就是本文要讲的内容,本文介绍了通过账号密码的方式通过接口在EMQX中创建用户,并连接EMQX的过程,EMQX支持的认账方式还有很多,例如JWT认证方式可以授权一次性密码认证,可以控制认证的有效期,我们在后面的章节具体应用中会进行说明。如果你对我们的 MASA 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们QQ:7424099。

MASAteam的博客 1660

使用MASA全家桶从零开始搭建IoT平台(一)环境准备

本系列文章以IoT开发小白的角度,从零开始使用.Net为主要技术搭建一个简单的IoT平台,由于是入门系列,所有代码以围绕IoT基础业务场景为主,不会涉及DDD等设计思想。

MASAteam的博客 1663

成都.NET线下技术沙龙倒计时一天

四川省成都市武侯区世纪城路198号世纪城新国际会展中心2区3楼。2023年4月15日下午13:30。.NET技术沙龙与你不见不散。点击链接即可报名活动。

MASAteam的博客 254

2023年成都.NET线下技术沙龙来了!大咖分享,报名从速

MASA技术团队来成都啦!我们联合了成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得。2023年4月15日13:30-17:30四川省成都市武侯区世纪城路198号世纪城新国际会展中心2区3楼(知域空间)【楼下可停车】

MASAteam的博客 613

Blazor在IoT领域的前端实践 @.NET开发者日

2023年3月11号,MASA技术团队参加了“.NET开发者日”,IoT项目经理郭浩在活动中做“”的主题分享数闪科技 IoT 项目经理从事 .NET 开发10余年,目前在数闪科技担任 IoT 项目经理,有大量 IoT 产品的开发经验,在 Android 和 iOS 的 Blazor MAUI 开发上有大量实践经验。本次分享主要分为两个部分第一部分我们为什么要在IoT项目中使用Blazor技术,Blazor给IoT带来了什么?第二部分。

MASAteam的博客 1007

MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。Apple 推送通知服务(Apple Push Notification service),简称 APNs。与之前Android使用个推不同,由于APNs国内可用,所以我们可以直接使用APNs来实现远程消息推送,不依赖其他第三方组件和服务。我们这里推送使用的是p8证书,p8证书相对p12证书来讲,更灵活,而且没有p12证书有效期1年的限制。

MASAteam的博客 1356

MASA MAUI Plugin (九)Android相册多选照片(使用Android Jetpack套件库)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。Jetpack 包含一系列 Android 库,它们都采用最佳做法并在 Android 应用中提供向后兼容性。hl=zh-cn上一篇我们是通过Intent实现的,今天我们用Jetpack 实现相册的多选功能。

MASAteam的博客 930

MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。项目中有需要从相册多选图片的需求,MAUI提供的无多选功能,虽然可以实现多选,但是多选文件需要长按,而且没有预览和返回按钮,用户交互效果不好。作为安卓开发小白,本人目前找到两种UI交互良好而且不需要定制选取界面的方法和大家分享。

MASAteam的博客 1539

MASA Stack 1.0 发布会 —— 社区问题解答

社区关心的问题都在这统一解答

MASAteam的博客 419

MASA Stack 1.0 发布会讲稿——生态篇

首先感谢贡献者们为MASA Stack社区所作的积极贡献,这些贡献者给我们提出了很多宝贵的建议,更是积极的提交PR帮助我们一起让产品更健壮,更完善,还在各种场合推广我们的解决方案,非常给力,大家都是为爱发电,给你们点赞!

MASAteam的博客 502

MASA Stack 1.0 发布会讲稿——实践篇

大家可能都有类似排查问题的经历,有很多大公司尤其是外企,非常重视流程管理,这时候如果你的数据经过了多个业务系统,但又没有使用类似TSC的平台支撑,那么你要调查具体的问题就很麻烦,你需要向多个系统的项目经理提出申请,让他们安排具体的运维或者DBA甚至开发来协助你调查,如果涉及的数据存在涉密或者用户的个人信息,那么还需要涉及到产品和业务人员签字,那么如果这个问题的优先级不够高,一个问题调查一两周都是很常见的情况。如图是我们部分系统界面展示,包含我们的IoT后台,用户端小程序,云商城小程序,和业务端App。

MASAteam的博客 715

MASA Stack 1.0 发布会讲稿 —— 产品篇

这三种方式里Caller都出现了,如果说你的项目比较复杂,可能用了不同的协议,还是更推荐Caller,因为Caller是我们的一个构建块,它是面对接口的方式去编程的,不管你对接哪一种方式,只需要调换Contrib包,书写方式没有特别大的区别。以上三种方式是大家比较常见的,最后一种方式是还在开发中的MASA Stack 2.0 集成平台,在2.0里,我们会做一个集成平台,它会帮大家去接管内外的应用,HTTP、gRPC、Dapr在我们的集成平台里面都可以快速接进来。从最初的底层环境创建,部署和创建对应的集群。

MASAteam的博客 605

MASA Stack 1.0 发布会讲稿——趋势篇

随着时间推移,云计算技术越来越成熟,能力越来越丰富,有很多的需求可以用云的能力直接提供,所有陆续会出现一些比如PaaS这样的平台,其实就是云计算提供的中间件能力。到了2014之后,随着容器和K8s这样的技术出现,我们能在云计算平台拿到更多的能力,这是一种非常强大的平台层的抽象,我们前面讲过的不可变基础设施等都是通过容器、K8s技术实现的,之前需要花很多资源和精力搭建的中间件的能力,现在开发者可以非常容易的获取和实践,从此开发者的诉求和基础设施之间的鸿沟不断的在变小。

MASAteam的博客 304

MASA Stack 1.0 发布会圆满收官

MASA Stack 1.0 发布会圆满收官,此次发布会得到了大家的热烈反响,视频号和B站两个平台观看人数突破千人,点赞超过两万本次发布会分为五大部分——MASA Stack 1.0趋势篇、产品篇、实践篇、生态篇、圆桌座谈

MASAteam的博客 357

MASA MAUI Plugin (七)应用通知角标(小红点)Android+iOS

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。上一篇文章我们集成了个推的消息通知,那么消息到达移动端之后,除了会在通知栏显示之外,在应用的角标也会显示未读消息的数量(小红点),然后用户点击查看消息之后,这些数字角标也可以自动消除,这个功能在MAUI中如何实现呢。

MASAteam的博客 1118

MASA Framework 事件总线 - 跨进程事件总线

跨进程事件总线允许发布和订阅跨服务传输的消息, 服务的发布与订阅不在同一个进程中在Masa Framework中, 跨进程总线事件提供了一个可以被开箱即用的程序: 提供了发件箱模式: 借助Dapr实现了消息的发布: 基于EFCore实现的集成事件日志的提供者, 提供消息的记录与状态更新、失败日志重试、删除过期的日志记录等。

MASAteam的博客 575

MASA Framework 事件总线 - 进程内事件总线

事件总线是一种事件发布/订阅结构,通过发布订阅模式可以解耦不同架构层级,同样它也可以来解决业务之间的耦合,它有以下优点松耦合横切关注点可测试性事件驱动根据需要我们可以自定义中间件,并注册到EventBus的请求管道中,比如通过增加, 将参数验证从业务代码中剥离开来,从而使得处理程序更专注于业务注册, 修改Program.cs自定义验证中间件,用于验证参数{_logger;{}{_logger?{_logger?typeName,

MASAteam的博客 492

MASA MAUI Plugin (六)集成个推,实现本地消息推送[Android] 篇

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。鉴于现在运营需求的增强,消息推送在Android开发中应用的场景是十分常见,如电商的活动宣传、资讯类产品进行新闻推送等等,所以关于这个功能我就不过多介绍了。

MASAteam的博客 809

MASA MAUI Plugin (五)Android 指纹识别

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。在API 级别 23 (Android 6.0)设备上引入指纹扫描仪为应用程序提供了传统的用户名/密码用户身份验证的替代方法。相较于用户名和密码,采用指纹对用户进行身份验证使应用程序安全性的实现更具隐私性,之后中添加了生物识别身份验证Biometric,增加了人脸认证相关功能。我们今天讨论的只涉及指纹认证,考虑到兼容性问题采用版本提供的。

MASAteam的博客 918

MASA MAUI iOS如何绑定微信

本系列文章面向移动开发小白,从零开始进行平台相关功能开发,演示如何参考平台的官方文档使用MAUI技术来开发相应功能。App开发中难免不了要对接第三方平台,这些平台官网也提供了SDK供开发者使用。对于Android和iOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松实现了。但是对于MAUI来说,并没有官方的SDK,这个时候就需要我们绑定适用于.NET MAUI 的本机库。

MASAteam的博客 1044
上一篇: MASA Framework的分布式锁设计
下一篇: MASA MAUI Plugin 安卓蓝牙低功耗(二)蓝牙通讯
MASA team
MASA team 数闪科技+MASA team 官方账号 数闪科技+MASA team 官方账号
博客等级 码龄5年 122粉丝 86原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值