如何从 CBPeripheral 和 CBCenter 获取 Mac 地址
How to get Mac Address From CBPeripheral And CBCenter
我需要从 CBPeripheral 和 CBCenter 的输入连接和传出连接中获取目标 mac 地址。标识符没有在其中定义。
look 已从 iOS 中删除 7. 还有其他方法吗?
您无法获取 CBPeripheral
的 MAC 地址,但您可以获得 identifier
属性,这是 iOS 的 UUID根据 MAC 等信息计算。
此值可以安全地存储并用于将来在此特定 iOS 设备上识别相同的外围设备。
它不能在另一个iOS设备上用于识别相同的外围设备。
您可以在 iOS 12 中毫无问题地访问 MAC 地址。
要获得 mac 地址,您必须执行以下步骤。
- 将BLE设备接收到的Data解析为String。
extension Data{
func hexEncodedString() -> String {
let hexDigits = Array("0123456789abcdef".utf16)
var hexChars = [UTF16.CodeUnit]()
hexChars.reserveCapacity(count * 2)
for byte in self {
let (index1, index2) = Int(byte).quotientAndRemainder(dividingBy: 16)
hexChars.insert(hexDigits[index2], at: 0)
hexChars.insert(hexDigits[index1], at: 0)
}
return String(utf16CodeUnits: hexChars, count: hexChars.count)
}
}
- 在地址中添加分隔符“:”。
extension String {
func separate(every stride: Int = 4, with separator: Character = " ") -> String {
return String(enumerated().map { [=11=] > 0 && [=11=] % stride == 0 ? [separator, ] : []}.joined())
}
}
- 在 didReadValueForCharacteristic( characteristic: CBCharacteritic) 中可以使用前两个函数来获取 mac 地址。
func didReadValueForCharacteristic(_ characteristic: CBCharacteristic) {
if characteristic.uuid == BleDeviceProfile.MAC_ADDRESS, let mac_address = characteristic.value?.hexEncodedString().uppercased(){
let macAddress = mac_address.separate(every: 2, with: ":")
print("MAC_ADDRESS: \(macAddress)")
}
}
- 享受你的 mac 地址:
"MAC_ADDRESS: 00:0A:57:4E:86:F2"
我需要从 CBPeripheral 和 CBCenter 的输入连接和传出连接中获取目标 mac 地址。标识符没有在其中定义。 look 已从 iOS 中删除 7. 还有其他方法吗?
您无法获取 CBPeripheral
的 MAC 地址,但您可以获得 identifier
属性,这是 iOS 的 UUID根据 MAC 等信息计算。
此值可以安全地存储并用于将来在此特定 iOS 设备上识别相同的外围设备。
它不能在另一个iOS设备上用于识别相同的外围设备。
您可以在 iOS 12 中毫无问题地访问 MAC 地址。 要获得 mac 地址,您必须执行以下步骤。
- 将BLE设备接收到的Data解析为String。
extension Data{
func hexEncodedString() -> String {
let hexDigits = Array("0123456789abcdef".utf16)
var hexChars = [UTF16.CodeUnit]()
hexChars.reserveCapacity(count * 2)
for byte in self {
let (index1, index2) = Int(byte).quotientAndRemainder(dividingBy: 16)
hexChars.insert(hexDigits[index2], at: 0)
hexChars.insert(hexDigits[index1], at: 0)
}
return String(utf16CodeUnits: hexChars, count: hexChars.count)
}
}
- 在地址中添加分隔符“:”。
extension String {
func separate(every stride: Int = 4, with separator: Character = " ") -> String {
return String(enumerated().map { [=11=] > 0 && [=11=] % stride == 0 ? [separator, ] : []}.joined())
}
}
- 在 didReadValueForCharacteristic( characteristic: CBCharacteritic) 中可以使用前两个函数来获取 mac 地址。
func didReadValueForCharacteristic(_ characteristic: CBCharacteristic) {
if characteristic.uuid == BleDeviceProfile.MAC_ADDRESS, let mac_address = characteristic.value?.hexEncodedString().uppercased(){
let macAddress = mac_address.separate(every: 2, with: ":")
print("MAC_ADDRESS: \(macAddress)")
}
}
- 享受你的 mac 地址: "MAC_ADDRESS: 00:0A:57:4E:86:F2"