Delphi 11 安卓的蓝牙权限申请

上一篇博客里面的代码,演示如何申请安卓的权限。

如何申请安卓的蓝牙权限?

本博客之前有一篇文章写过。

现在 Google 要求 Android API Level 必须是 33。对于 BLE 的权限申请,有了一些新的要求。

以下描述,基于 Delphi 11

首先是用于安卓的 Project 在 Delphi IDE 里面的设置:

在 IDE 菜单:Project - Options - Uses Permissions - 里面:

然后是申请权限的代码:

unit UDmPermissions;
// 安卓的权限申请代码 Delphi 11
interfaceusesSystem.SysUtils, System.Types, System.Classes, System.Permissions, FMX.DialogService, System.UITypes;typeTDmPermissions = class(TDataModule)private{ Private declarations }FGotPermission: TNotifyEvent;procedure DoGotPermissions;private constLOCATION_PERMISSION = 'android.permission.ACCESS_FINE_LOCATION';BLUETOOTH_SCAN_PERMISSION = 'android.permission.BLUETOOTH_SCAN';BLUETOOTH_ADVERTISE_PERMISSION = 'android.permission.BLUETOOTH_ADVERTISE';BLUETOOTH_CONNECT_PERMISSION = 'android.permission.BLUETOOTH_CONNECT';public{ Public declarations }procedure GetAndroidBLEPermission;property OnGotPermissions: TNotifyEvent read FGotPermission write FGotPermission;end;varDmPermissions: TDmPermissions;implementation{%CLASSGROUP 'FMX.Controls.TControl'}{$R *.dfm}{ TDmPermissions }procedure TDmPermissions.DoGotPermissions;
beginif Assigned(FGotPermission) then FGotPermission(Self);
end;procedure TDmPermissions.GetAndroidBLEPermission;
varPermissions: TArray<string>;
begin
{------------------------------------------------------------------------安卓的蓝牙权限申请在 IDE 菜单:Project - Options - Uses Permissions -1. BlueTooth Admin: 不用选择,也能打开蓝牙扫描;2. BLUETOOTH SCAN;BLUETOOTH CONNECT 必须勾选;4. BLUETOOTH ADVERTISE 如果没有勾选,下面的代码里面 Permissions 包含了 BLUETOOTH_ADVERTISE_PERMISSION会导致 Length(GrantResults) = 4 而第三项 GrantResults[2] = TPermissionStatus.Granted 不能通过;但是,并不影响打开蓝牙扫描。因此,这里如果仅仅是使用蓝牙扫描,可以不需要这一项目。也就是说 Permissions 里面可以只有 3 项。
------------------------------------------------------------------------}if TOSVersion.Check(12) thenPermissions := [LOCATION_PERMISSION, BLUETOOTH_SCAN_PERMISSION, BLUETOOTH_ADVERTISE_PERMISSION, BLUETOOTH_CONNECT_PERMISSION]elsePermissions := [LOCATION_PERMISSION];PermissionsService.RequestPermissions(Permissions,procedure(const Permissions: TClassicStringDynArray; const GrantResults: TClassicPermissionStatusDynArray)beginif ((Length(GrantResults) = 4) and (GrantResults[0] = TPermissionStatus.Granted)and (GrantResults[1] = TPermissionStatus.Granted)and (GrantResults[2] = TPermissionStatus.Granted)and (GrantResults[3] = TPermissionStatus.Granted)) or((Length(GrantResults) = 1) and (GrantResults[0] = TPermissionStatus.Granted)) thenbeginSelf.DoGotPermissions;endelsebeginTDialogService.ShowMessage('Cannot start BLE scan as the permission has not been granted; 没有获得权限');end;end);
end;end.
一点说明:

上面的代码里面,申请了 4 个权限。如果是低版本的安卓,只需要申请一个,也就是 LOCATION_PERMISSION。

高版本的安卓系统,这里申请了 4 个。

实验证明,如果程序需要扫描外面的蓝牙设备,只需要3个,不需要上面代码里面的 BLUETOOTH_ADVERTISE;

实验证明,如果代码里面包含了 BLUETOOTH_ADVERTISE,但是在 IDE 的 Uses Permissions 里面,没有勾选 Bluetooth advertise,会导致上述代码里面的:

GrantResults[2] = TPermissionStatus.Granted 

上述代码会返回 False 导致程序认为权限申请失败。但并不影响程序打开 BLE 开始扫描外部设备。

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

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

相关文章

vue页面基本增删改查

练手项目vue页面 新手前端轻喷&#xff1a; 效果如下 1、2两个部分组成&#xff1a; 对应代码中 element-ui中的 el-form 和 el-table 照着抄呗&#xff0c;硬着头皮来&#xff01; 建议&#xff1a;认真读一遍你用的组件 那上边简单得列表举例&#xff1a; 建议大家手敲一个…

Unity与Android交互通信系列(5)

在前述文章中&#xff0c;已经使用了AndroidJavaProxy代理接口&#xff0c;本节我们将详细的介绍AndroidJavaProxy代理的用法。正如其名&#xff0c;AndroidJavaProxy是一个代理&#xff0c;它在Android端代码与Unity端代码交互中起一个桥接作用。其一般用法为在Java代码中定义…

【深度学习】主要提出者【Hinton】中国大会最新演讲【通往智能的两种道路】

「但我已经老了&#xff0c;我所希望的是像你们这样的年轻有为的研究人员&#xff0c;去想出我们如何能够拥有这些超级智能&#xff0c;使我们的生活变得更好&#xff0c;而不是被它们控制。」 6 月 10 日&#xff0c;在 2023 北京智源大会的闭幕式演讲中&#xff0c;在谈到如…

一键生成PDF即刻呈现:轻松创建无忧体验

在信息爆炸的时代&#xff0c;我们每天都在与各种文件、资料打交道。无论是工作中的报告、合同&#xff0c;还是学习中的笔记、论文&#xff0c;如何高效、安全地管理这些珍贵的资料&#xff0c;成为了我们迫切的需求。幸运的是&#xff0c;随着科技的发展&#xff0c;我们不再…

SpringBoot Admin 详解

SpringBoot Admin 详解 一、Actuator 详解1.Actuator原生端点1.1 监控检查端点&#xff1a;health1.2 应用信息端点&#xff1a;info1.3 http调用记录端点&#xff1a;httptrace1.4 堆栈信息端点&#xff1a;heapdump1.5 线程信息端点&#xff1a;threaddump1.6 获取全量Bean的…

【Python笔记-设计模式】享元模式

一、说明 享元模式是一种结构型设计模式&#xff0c;它摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中载入更多对象。 (一) 解决问题 旨在减少大量相似对象创建时的内存开销 (二) 使用场景 大量…

AI:136-基于深度学习的图像生成与风格迁移

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

在线程调用的函数中使用pthread_exit同样会将线程退出

如上图所示&#xff0c;在func()函数中调用pthread_exit&#xff0c;同样可以退出当前线程&#xff1b; 类似的&#xff0c;如果func&#xff08;&#xff09;函数中调用exit&#xff0c;可以直接退出整个进程。 return 是返回到函数调用处&#xff1b; pthread_exit是退出…

KTV点歌系统vue+springboot音乐歌曲播放器系统

目前现有的KTV点歌系统对于用户而言其在线点歌流程仍然过于繁琐&#xff0c;对于歌曲而言其系统安全性并不能保障。同时整套系统所使用的技术相对较为落后&#xff0c;界面不能动态化展示。相比较于其它同类型网站而言不能体现技术先进性。 1.2 项目目标 KTV点歌系统的后台开发…

wpf 3d 后台加载模型和调整参数

下载了一个代码&#xff0c;加载obj模型&#xff1b;它的参数在xaml里&#xff0c;模型加载出来刚好&#xff1b; 然后加载另一个obj模型&#xff1b;加载出来之后大&#xff0c;偏到很高和左的位置&#xff1b; 它之前的摄像机位置&#xff0c; Position"9.94759830064…

Apache celeborn 安装及使用教程

1.下载安装包 https://celeborn.apache.org/download/ 测0.4.0时出现https://github.com/apache/incubator-celeborn/issues/835 2.解压 tar -xzvf apache-celeborn-0.3.2-incubating-bin.tgz 3.修改配置文件 cp celeborn-env.sh.template celeborn-env.shcp log4j2.xml.…

前后端分离Vue+nodejs校园论坛bbs系统x450z

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode本论文拟采用计算机技术设计并开发的论坛bbs系统&#xff0c;主要是为用户提供服务。使得用户可以在系统上查看帖子信息、签到积分等…

详解Megatron中的数据混合算法(BlendableDataset)

&#x1f9d1;‍&#x1f4bb; 本文主要讲解Megatron早期版本中的数据混合算法。 目录 1. 数据混合2. 源码解析3. 证明部分&讨论4. 进一步优化 1. 数据混合 在谈源码之前&#xff0c;我们有必要先了解一下Megatron中的数据混合思想。 给定 n n n 个数据集 D 1 , D 2 , …

给定一个边与边可能相交的多边形,求它的轮廓线

大家好&#xff0c;我是前端西瓜哥。 最近遇到一个需求&#xff0c;给定一个多边形&#xff08;边与边可能相交&#xff09;&#xff0c;求这个多边形的轮廓线。 需要注意的是&#xff0c;轮廓线多边形内不能有空洞&#xff0c;使用的不是常见的非零绕数规则&#xff08;nonze…

Java+SpringBoot,打造极致申报体验

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神&#xff0c;大力实施生态优先绿色发展战略&#xff0c;积极践行人、水、自然和谐共生理念&…

opencascade在vs和qt下改变视图方向和设置线框模式

一.改变视图方向&#xff08;以顶部视图为例&#xff09; 1.在qt的界面代码中设置好 2.在view.h中设置好槽函数 3.在lzzcad.cpp中设置槽与信号的连接&#xff0c;并在工具栏上显示 4.在view.cpp中给出函数实现 5.给出快捷键实现方式 二.设置线框模式 同上&#xff0c;加入函数…

[深度学习]yolov9+deepsort+pyqt5实现目标追踪

【YOLOv9DeepSORTPyQt5追踪介绍】 随着人工智能技术的飞速发展&#xff0c;目标追踪在视频监控、自动驾驶等领域的应用日益广泛。其中&#xff0c;YOLOv9作为先进的目标检测算法&#xff0c;结合DeepSORT多目标追踪算法和PyQt5图形界面库&#xff0c;能够为用户提供高效、直观…

python-可视化篇-简单-条形图输出主要省份GDP排名情况

条形图输出主要省份GDP排名情况 代码 gdp广东:97277.77:107671.07 江苏:92595.40:99631.52 山东:76469.70:71067.5 浙江:56197.00:62353 河南:48055.90:54259.2 四川:40678.10:46615.82 湖北:39366.60:45828.31 湖南:36425.78:39752.12 河北:36010.30:35104.5 福建:35804.04:…