当前位置: 首页 > 知识库问答 >
问题:

在iOS中获取蓝牙低能耗外设的MAC地址

松嘉颖
2023-03-14

我目前正在开发一个基于蓝牙低能耗设备的iOS应用程序。为了得到一个唯一的标识符来比较得到的外设,我必须得到外设的MAC地址。

据观察,外围设备的UUID属性在iOS设备中不同,而且外围设备要获得UUID,必须至少连接到主设备一次。因为我必须处理登机手续,所以我不想建立连接。当我通过bluetooth services portal时,我发现设备信息本身就是一项服务,除非主iOS设备和外围bluetooth Lower energy设备之间建立了连接,否则无法检索该服务。

我发现在Android中,当我们从设备扫描本身得到响应时,我们就会得到设备的全部信息,包括它的MAC地址(使用getAddress())。

共有1个答案

仲孙铭
2023-03-14

CBPercipal的identifier属性将用于您的目的,可从CBCentralManager的DidDiscoverPercipal委托方法中仍未连接的设备获得:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

CBPeripheral *peripheral ...

NSUUID* serverId = [peripheral identifier];

我有六个LE设备我正在试验,包括多套相同的设备。我刚刚证实,在两个iOS设备上,所有这些LE小部件的标识符都是不同的,但对于每个iOS设备,每个小部件的标识符在应用程序启动时,甚至在应用程序删除和重新安装时都是保留的。我想说,这确实证明了操作系统内部存储了足够的信息,对于给定的时间,您将能够区分并重新识别应用程序遇到的所有外设,而无需实际连接它们。还要注意,AdvisentData(在连接前也可用)充满了有用的信息,如CBAdvisentDataLocalNameKeyCBAdvisentDataManuFacturerDataKeyCBAdvisentDataServiceUuidsKeyCBAdvisentDataSolicitedServiceUuidsKey和其他信息,尽管没有任何信息可以唯一地将设备标识为[外围设备标识符]。

我没有尝试做设备备份和恢复来证明UUID被保留,但我敢打赌它们是保留的,如果它们不是,苹果会认为这是一个bug。

 类似资料:
  • 我试图访问Android中低能蓝牙设备的UUID,最终将字符串发布到web API。 以下是我的代码,可以很好地为本地名称和mac地址敬酒: 有人能帮忙吗?

  • 我得到一些信息,Android设备现在可以在蓝牙低能耗(BLE)外围模式下运行。应用程序可以使用此功能从Android L中的New向附近的设备广播它们的存在。 我已经全部配置好了(即蓝牙LE广告和广告数据的设置要在广告包中进行广告),当我开始发送时,我发现我无法监听传入的连接。谁能帮我? 我是一个基于l-开发者-预览-参考的API(Added Package:android.bluetooth.

  • 有人知道如何添加蓝牙低能耗作为设备要求,只允许iOS应用程序在蓝牙LE设备上可用吗?谢啦

  • 最近,我买了一台iBeacon设备,打算创建Android应用程序,以便识别和使用它。我是一个在Android应用程序中使用蓝牙的新手,有很多事情我还不知道。在互联网和本论坛中,我找到了使用Radius Networks的Android IBeacon库的建议,但是,唉,现在它不再可用了: https://github.com/RadiusNetworks/android-ibeacon-serv

  • jd.readBLECharacteristicValue(Object object) 读取低功耗蓝牙设备的特征值的二进制数据值。注意:必须设备的特征值支持 read 才可以成功调用。 参数名 类型 默认值 必填 说明 deviceId string 是 蓝牙设备 id serviceId string 是 蓝牙特征值对应服务的 uuid characteristicId string 是 蓝牙

  • 是否可以自动连接到蓝牙低能耗(BLE)设备? Android文档表明[](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context,boolean,android.bluetooth.BluetoothGattCallback)