iOS swift5 获取系统或其他app已经连接的蓝牙设备

news2024/11/19 4:46:51

文章目录

  • chatGPT答案
    • 1.2 retrievePeripheralsWithIdentifiers
  • 本人实例
  • 参考博客

chatGPT答案

  • 1.1 retrieveConnectedPeripherals(withServices (本人没有测试成功)
    要获取系统或其他app已连接的蓝牙设备,你可以使用CoreBluetooth框架提供的CBCentralManager类。下面是使用Swift 5的示例代码:
import CoreBluetooth

class BluetoothManager: NSObject, CBCentralManagerDelegate {

    var centralManager: CBCentralManager!
    
    override init() {
        super.init()
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }
    
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            // 扫描已连接的外设
            let connectedPeripherals = centralManager.retrieveConnectedPeripherals(withServices: [/* 服务UUID */])
            for peripheral in connectedPeripherals {
                print(peripheral.name)
                // 如果需要,你可以保存已连接的外设以供后续使用
            }
        }
    }
}

在上面的示例中,当CBCentralManager对象初始化时,你必须提供一个代理对象来接收蓝牙中央管理器的事件通知。然后,你可以实现centralManagerDidUpdateState方法,在蓝牙中央管理器状态更新时调用该方法。在该方法中,你可以使用retrieveConnectedPeripherals(withServices:)方法获取已连接的外设列表。需要注意的是,你需要指定要扫描的服务的UUID,这样你才能获取到对应服务的已连接外设。

1.2 retrievePeripheralsWithIdentifiers

在使用CoreBluetooth框架时,你可以使用retrievePeripherals(withIdentifiers:)方法获取系统已连接的蓝牙设备。该方法接受一个UUID数组作为参数,用于指定要检索的蓝牙设备的标识符。

下面是使用Swift 5的示例代码:

import CoreBluetooth

class BluetoothManager: NSObject, CBCentralManagerDelegate {

    var centralManager: CBCentralManager!
    
    override init() {
        super.init()
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }
    
    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        if central.state == .poweredOn {
            // 检索已连接的外设
            let uuids = [UUID(uuidString: "设备标识符1"), UUID(uuidString: "设备标识符2")]
            let connectedPeripherals = centralManager.retrievePeripherals(withIdentifiers: uuids)
            for peripheral in connectedPeripherals {
                print(peripheral)
                // 如果需要,你可以保存已连接的外设以供后续使用
            }
        }
    }
}

在上面的示例中,当CBCentralManager对象初始化时,你必须提供一个代理对象来接收蓝牙中央管理器的事件通知。然后,你可以实现centralManagerDidUpdateState方法,在蓝牙中央管理器状态更新时调用该方法。在该方法中,你可以使用retrievePeripherals(withIdentifiers:)方法根据指定的设备标识符数组检索已连接的外设。如果找到匹配的外设,它们将返回给你,你可以进行相应的操作。

确保提供正确的设备标识符,并使用正确的UUID对象作为参数。你可以通过外设的identifier属性获取设备的标识符。

请注意,只有在设备已经连接并且还处于连接状态时,你才能使用该方法成功检索到外设。如果设备未连接或已断开连接,将无法获取到它们。

  • 1.3 ExternalAccessory框架提供的EAAccessoryManager类(本人没有测试成功)

红色涂掉的是app的名字
请添加图片描述

要获取iOS系统已配对的蓝牙设备,你可以使用ExternalAccessory框架提供的EAAccessoryManager类。请注意,ExternalAccessory框架仅适用于与iOS设备进行MFi认证的蓝牙设备。下面是使用Swift 5的示例代码:

import ExternalAccessory

class BluetoothManager {

    func getPairedBluetoothDevices() {
        let connectedAccessories = EAAccessoryManager.shared().connectedAccessories
        for accessory in connectedAccessories {
            print(accessory.name)
            // 如果需要,你可以保存已配对的蓝牙设备以供后续使用
        }
    }
}

在上面的示例中,你可以使用EAAccessoryManager.shared().connectedAccessories方法获取已连接的蓝牙配件(包括配对的蓝牙设备)。然后,你可以遍历配件列表并访问每个配件的属性,如名称、型号等。

请注意,使用ExternalAccessory框架要求你的应用程序在Info.plist文件中添加特定的键值对以启用外部配件支持。你需要在Info.plist中添加以下键值对:

Supported external accessory protocols(数组):列出你的应用程序支持的外部配件协议标识符。
UIBackgroundModes(数组):添加值external-accessory以支持在后台与外部配件进行通信。
确保已按照ExternalAccessory框架的要求进行配置,以使其正常工作。

本人实例

参考博客

ios蓝牙扫描指定的设备scanForPeripheralsWithServices(过滤掉其他设备,只留下自家设备) - csdn
iOS蓝牙开发连接系统或其他APP已经连接、配对成功的蓝牙设备 - CSDN

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

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

相关文章

【节点边际电价】机组运行约束对机组节点边际电价的影响分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

新人如何学习软件测试

零基础学习软件测试不失为一个好的选择,虽然IT行业里对小白最友好的非软件测试莫属了,但是也要看你个人在学习软件测试这件事上面花费了多少的时间和努力了~ 每年毕业季,IT行业依然是比较热门且收入是最高的行业。对于应届毕业生来说想要进入…

Unity3d 开发Pico4应用打开工程卡在Importing(iteration xxx) busy for xx:xx)...问题记录

问题 大致问题如题: 步骤是参照了PICO官方给出的快速开始的步骤进行的,而这个我问题的出现是在导入 PICO Unity Integration SDK 前往 SDK 下载中心,下载最新版本的 SDK。 1.解压所下载的 SDK 压缩包。 2.你将会得到一个包含 package.json…

微服务圣经1:零基础搭建一套SpringCloud微服务脚手架(SpringCloud+Dubbo+Docker+Jenkins)

说在前面 在40岁老架构师尼恩的读者社群(50)中,大量的小伙伴是架构师、高级开发,大家都有丰富的开发、架构经验。 在开发过程中,一般情况下,大家都是用现有的开发框架。 导致的一个严重问题是&#xff1…

全网独家首发最牛最全面的JMeter使用BeanShell断言

BeanShell简介 BeanShell是使用Java语法的一套脚本语言,在JMeter的多种组件中都有BeanShell的身影,如: 定时器:BeanShell Timer前置处理器:BeanShell PreProcessor采样器:BeanShell Sampler后置处理器&am…

JAVA - 字符串工具类StringBuilder和StringBuffer

文章目录 目录 文章目录 前言 二.常用方法演示 1.append()用于将指定的字符串添加到当前StringBuilder对象的末尾 2.delete():用于删除StringBuilder对象中指定位置的字符。 3.insert():用于在指定位置插入指定字符串。 4.replace():用于替换…

YOLOv5【detect.py源码及参数】超详细注释解读!!!建议收藏✨✨!

之前的文章介绍了YOLOv5的网络结构🚀与目录结构源码🚀的详细解读,今天带来的是YOLOv5的 detect.py 代码逐行解读以及注释,废话不多说,让我们一起学习YOLOv5的 detect.py 源码吧! YOLOv5所使用版本&#xf…

RocketMQ介绍

一、MQ简介 1.1 项目工程弊端 1.2 MQ简介 MQ(Message Queue)消息队列,是一种用来保存消息数据的队列 队列:数据结构的一种,特征为 “先进先出” 何为消息: 服务器间的业务请求 原始架构: 服务器中的A功能…

Java并发编程:并发问题和多线程技术的应用和优化

章节一:引言 在当今的软件开发领域中,多线程编程是一项至关重要的技术。随着处理器核心数量的增加和计算机系统的并行性的不断提高,充分利用多核心处理器的能力已成为现代软件开发的关键要素之一。Java作为一种强大的编程语言,在…

MobPush Flutter平台插件

集成准备 注册账号 使用PushSDK之前,需要先在MobTech官网注册开发者账号,并获取MobTech提供的AppKey和AppSecret,详情可以点击查看注册流程 MobPush后台配置 注册MobTech账号后,需要在MobTech后台进行相关信息的配置&#xff…

信息学算法竞赛中一种特殊的数据读入方式

在算法竞赛中,有时会出现一些特殊的数据读入,比如每行的数据元素个数不确定,更复杂一些的是连续多行的数据个数不确定。单行的不确定元素个数的读入可以借助 w h i l e ( while( while(~ s c a n f ( ) ) scanf()) scanf())或 w h i l e ( c …

简单实现小程序授权登录功能

本人给大家带来了关于微信小程序的相关知识,其中主要介绍了怎么实现小程序授权登录功能的相关内容,下面一起来看一下,希望对大家有帮助。 在我们平时工作、学习、生活中,微信小程序已成为我们密不可分的一部分,我们仔细…

【Java】记录一次服务性能问题定位、调优完整过程

文章目录 背景压测准备初步压测结论 排查过程记录排除中间件及网络因素借助Arthas及Skywalking暴露prometheus指标修改数据库最大连接池数场景一场景二场景三场景四场景五场景六场景七场景八结论 Consumer消费能力优化增加消费者增加Topic Queue数量Queue总数:96Que…

Redis:哨兵模式——可以理解为主从复制的升级版

如果不懂什么是主从复制,可以看我的上一篇文章,这一篇文章与上一篇文章息息相关,可以先去大概去了解一下。 Redis:主从复制_通过此功能实现对内存上的数据更好的保护_不想睡醒的梦的博客-CSDN博客 什么是哨兵模式? 上一篇文章主…

【穿针引线】基于ElAdmin项目论Spring Security的工作原理,实现前后端OAuth2单点登录,源码分析

【穿针引线】基于ElAdmin项目论Spring Security的工作原理,源码分析 序一、核心类1.1 SecurityContext 安全上下文1.2 网安适配器WebSecurityConfigurerAdapter1.3 认证器 Authentication1.4 信息认证提供者1.4.1 抽象用户信息认证提供者 AbstractUserDetailsAuthen…

01-C++-VSCode配置C++环境(windows)

VSCode配置C环境 前言安装VSCode安装mingw编译器VSCode配置C环境 前言 本篇来学习写使用VSCode配置C环境 安装VSCode 下载地址:VSCode 下载后路next安装即可 安装mingw编译器 下载地址:mingw64 点击Files 向下拉,点击下载(建议windows6…

Python系列之字符串和列表

感谢点赞和关注 ,每天进步一点点!加油! 目录 一、字符串 1.1 字符串的定义与输入 1.2 字符串的拼接与格式化输出 1.3 字符串的下标 1.4 字符串的切片和倒序 1.5 字符串的常见操作 二、列表-List 2.1 列表的常见操作 2.2 列表合并和拼…

【云原生-深入理解Kubernetes-2】容器 Linux Cgroups 限制

文章目录 系列文章目录👹关于作者回顾一、Docker Engine 和 Hypervisor 区别二、容器比虚拟机受欢迎?优势劣势 三、Linux Cgroups 限制使用 Cgroups 子系统配置文件- 前提知识- 限制 ✊ 最后 系列文章目录 【云原生-深入理解Kubernetes-1】容器的本质是进…

一文理解RocketMQ

概述 RocketMQ是阿里开发的基于JMS的分布式消息中间件,是由纯JAVA实现的。放弃了比较重量级的Zookeeper作为注册中心,使用自研的NameServer实现元数据的管理,支持事务消息,顺序消息,批量消息,定时消息以及消…

软件体系结构复习题

2020 论述题 统一软件过程RUP:用例驱动、以架构为中心的迭代增量开发 一个用例可能需要多个功能来实现,一个功能也可能被用于多个用例 边界类、控制类、实体类 顺序图、通信图、定时图、交互概述图 扩展关系《extend》、包含关系《include》、…