iOS设置作为蓝牙外设

文章目录

  • 一、 说明
  • 二、设置蓝牙外设
    • 1. 初始化外设中心
    • 2. 创建外设服务
    • 3. 获取外设蓝牙状态
    • 4. 发送蓝牙数据
  • 三、外设代理
    • 1. 状态变更回调
    • 2. 中心设备读取数据的时候回调
    • 3. 中心设备写入数据的时候回调
    • 4. 订阅提示
  • 四、发送广播数据
    • 1. 发送不同广播
    • 2. beacon广播
    • 3. 停止广播

一、 说明

任意苹果设备都可以作为蓝牙外设进行设置。
苹果蓝牙后台的限制,原本广播会有两个段分别是localName和serviceUUID这两块,但现在后台广播时,是不发送在这两段的。

二、设置蓝牙外设

1. 初始化外设中心

let peripheralManager = CBPeripheralManager.init(delegate: self, queue: DispatchQueue.main)

2. 创建外设服务

public func setupServiceAndCharacteristics() {// 创建服务let serviceID = CBUUID(string: kServiceUUID)let service = CBMutableService(type: serviceID, primary: true)// 创建服务中的特征let characteristicID = CBUUID(string: kChARACTERISTICUUID)let characteristic = CBMutableCharacteristic(type: characteristicID, properties: [.read, .write, .notify], value: nil, permissions: [.readable, .writeable])// 特征添加进服务service.characteristics = [characteristic]// 服务加入管理self.peripheralManager?.add(service)}

3. 获取外设蓝牙状态

let tempState = self.peripheralManager?.state ?? .unknown

4. 发送蓝牙数据

let sendSuccess: Bool = self.peripheralManager.updateValue(self.textField.text.data(using: NSUTF8StringEncoding), forCharacteristic: self.characteristic, onSubscribedCentrals: nil)

三、外设代理

CBPeripheralManagerDelegate

1. 状态变更回调

    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {print(peripheral.state)delegate?.peripheralUpdateState(peripheral)}

2. 中心设备读取数据的时候回调

    func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveRead request: CBATTRequest) {// 请求中的数据,这里把文本框中的数据发给中心设备
//        request.value = self.textField.text.data(using: NSUTF8StringEncoding)// 成功响应请求
//        peripheral.respondToRequest(request, withResult: CBATTErrorSuccess)}

3. 中心设备写入数据的时候回调

    func peripheralManager(_ peripheral: CBPeripheralManager, didReceiveWrite requests: [CBATTRequest]) {// 写入数据的请求let request = requests.lastlet data = request?.valuedelegate?.peripheralDidReceiveWrite(data)}

4. 订阅提示

    func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didSubscribeTo characteristic: CBCharacteristic) {print(#function)}// 取消订阅回调func peripheralManager(_ peripheral: CBPeripheralManager, central: CBCentral, didUnsubscribeFrom characteristic: CBCharacteristic) {print(#function)}
}

四、发送广播数据

1. 发送不同广播

self.peripheralManager?.startAdvertising(periData)

2. beacon广播

注意⚠️:测试时beacon广播CLBeacon未检测到iPhone设备。 即使使用 Turning an iOS device into an iBeacon device 也没有结果(如果帮助不胜感激)

/// 开始发送广播public func startBroadcasting(major: UInt16 = 0, minor: UInt16 = 0, peripheralData: [String: Any]? = nil) {// 为beacon基站创建一个唯一标示guard let myUUID = UUID(uuidString: kBeaconUUIDString) else {return}let constraint = CLBeaconIdentityConstraint(uuid: myUUID, major: major, minor: minor)let myBeaconRegion = CLBeaconRegion.init(beaconIdentityConstraint: constraint, identifier: kBeaconidentifier)// 获取该Beacon区域的信号信息var periData = myBeaconRegion.peripheralData(withMeasuredPower: nil) as? [String: Any]peripheralData?.forEach { (key: String, value: Any) inperiData?[key] = value}// 创建并广播Beacon信号self.peripheralManager?.startAdvertising(periData)}

3. 停止广播

self.peripheralManager?.stopAdvertising()

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

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

相关文章

Yarn安装报错和使用

yarn 安装 Yarn 支持 Windows、MacOS 和 Linux 等多个平台。 我们也可以前往官网下载安装包:https://classic.yarnpkg.com/en/docs/install。 同时,也可以使用命令行进行安装,安装命令如下: npm install -g yarn安装报错 ~ % n…

配电室电力监控系统:实时掌握电力运行状况

配电室是电力系统的重要组成部分,负责将发电厂输送的电力分配到各个用电终端。随着电力需求的不断增长,配电室的规模和复杂性也在增加。为了确保电力系统的稳定运行,采用配电室电力监控系统变得至关重要。 一、配电室电力监控系统概述 力…

Python库学习(七):科学计算库Numpy[续篇一]:结构数组

1.介绍 结构数组是NumPy中的一种高级数据结构,它允许用户在单个数组中存储多种数据类型的元素。与普通的NumPy数组不同,结构数组的每个元素可以具有不同的数据类型,并且可以使用字段名来引用这些元素。这使得结构数组非常适合处理表格数据、…

TCP 和 UDP哪个更好

传输控制协议 (TCP) 和用户数据报协议 (UDP) 是互联网的基础支柱,支持从网络源到目的地的不同类型的数据传输。TCP更可靠,而UDP优先考虑速度和效率。本文解释了两种协议的工作原理,并详细讨论了…

【遥遥领先】Eolink IDEA 插件:零代码入侵,自动生成接口

省流版: Eolink 有 IDEA 插件吗? 有,而且遥遥领先!我们在一年半之前就发布了,而且功能更丰富! IDEA 插件市场搜索“Eolink Apikit”即可安装使用。 🚀使用指引:Eolink - IntelliJ ID…

virtualbox无界面打开linux虚拟机的bat脚本,以及idea(代替Xshell)连接linux虚拟机的方法

virtualbox无界面打开linux虚拟机的bat脚本,以及idea连接linux虚拟机的方法 命令行运行代码成功运行的效果图 idea连接linux虚拟机的方法【重要】查看虚拟机的IP地址idea中选择菜单(该功能可代替Xshell软件)配置设置连接成功进入idea中的命令…

20230925工作心得

1、如果使用map的时候,担心key重复,覆盖掉值 那么直接加个if/else判断就好了。 如果map.containsKey,那么就把值追加上去,否则就直接put。 2、list的removeAll方法 list.removeAll(list2);//list要removeAll谁,就是看list自己比…

【含2023java面试题】分布式锁方案设计:防止取消订单误支付Bug

AI绘画关于SD,MJ,GPT,SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI…

Java on Azure Tooling 8月更新|以应用程序为中心的视图支持及 Azure 应用服务部署状态改进

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎阅读 Java on Azure 工具的八月更新。在本次更新中,我们将推出新的以应用程序为中心的视图支持,帮助开发人员在一个项…

德大黄鱼开捕 年产量20万吨 京东超市多举措保障黄鱼品质

作为“中国大黄鱼之都”,宁德大黄鱼占全国大黄鱼总产值产量均在90%以上。有关方面预计,今年全年宁德大黄鱼产量达20万吨,年增产10%,直接经济产值超百亿元。 宁德大黄鱼开捕活动,由宁德市政府、宁德渔业协会、京东超市…

文举论金:黄金原油全面走势分析策略指导。

分析永远是辅助,策略才是盈利的基本。对于技术,没有对错,关键性的分水岭,易成为行情转折的拐点抑或助推趋势的延伸。但是,交易中或实盘操作中,咱们必须果断,在对的方向里坚持,而当方…

leetCode 968.监控二叉树(利用状态转移+贪心)

968. 监控二叉树 - 力扣(LeetCode) 给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。 >>解题思路: 重要线索->题目示例中的摄…

不甘于被强势厂商捆绑,中国移动未来或自研5G基站

一直以来运营商被认为只是做服务,而设备等都是由设备商提供的,甚至由于如今的设备高度复杂,设备商已承包越来越多的基站运维工作,运营商的技术水平越来越低,不过随着中国移动发布5G射频芯片8676,似乎显示出…

JVM之选择合适的垃圾收集器(CMS、G1)

1.JVM内存模型,栈、本地方法栈、程序计数器、堆、元空间、方法区、本地方法区,除程序计数器外,其他区域都能进行垃圾收集 2.栈,它的生命周期与线程相同,线程私有,会使用操作系统原生内存,方法…

python过滤敏感词

敏感词一般是指带有敏感政治倾向(或反执政党倾向)、暴力倾向、不健康色彩的词或不文明用语,论坛、网站管理员一般会设定一些敏感词,以防不当发言影响论坛、网站环境。若论坛、网站设置了敏感词,用户编辑的内容又含有敏…

Kafka Shell命令交互

Kafka提供了一个命令行工具,用于管理和与Kafka集群交互。这个命令行工具通常称为Kafka Shell,它允许您执行各种操作,如创建主题、发送和消费消息、查看主题列表等。 以下是一些常用的Kafka Shell命令: 创建主题(Topic): kafka-topics.sh --create --topic my-topic --pa…

Levels - UE5中的建模相关

一些日常的笔记; 可以使用Shapes面板建立基础模型: 可以在PolyModel中继续细分模型: UE5中的建模有PolyGroups概念,可以在Attributes面板中直接编辑: 使用GrpPnt方式可以直接用笔刷设定新的PolyGroups,这样…

抖音SEO矩阵系统源码开发搭建

1. 确定需求和功能:明确系统的主要目标和需要实现的功能,包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构:根据需求和功能确定系统的架构,包括前端、后端、数据库等部分的设计&#xff0…

计算机组成原理之硬件的内部结构,拆开单独的硬件,查看硬件组成部分的结构和功能。

大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要教内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …

计算机视觉与深度学习-经典网络解析-ZFNet-[北邮鲁鹏]

这里写目录标题 ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数 ZFNet ZFNet是一种基于AlexNet的模型,由Matthew D. Zeiler和Rob Fergus在2013年提出。相对于AlexNet,ZFNet结构与AlexNet网…