iOS如果获取蓝牙Mac地址

news/2024/11/26 6:02:30/

在做iOS蓝牙开发的时候肯定会遇到这种问题,苹果自带的CoreBluetooth SDK中不能获取到蓝牙的Mac地址,只能得到UUID,但是UUID并不是唯一的,换一个设备再连接UUID就不一样了。而且Android手机是可以获取到Mac地址的,不能很好的兼容Android手机,Android是不可能获取到UUID,为了很好的兼容,只能iOS想办法获取Mac地址了。幸运的是iOS也不是没有办法获取到Mac地址。

主要思路

虽然苹果官方的API没有获取Mac地址的方法,但是当我翻看蓝牙的文档的时候,我发现蓝牙有提供一个设备信息的service[service UUID:0x180A],里面提供了两个characteristic:获取芯片的Mac地址(0x2A23 )和获取软件的版本号(0x2A26)。如下图所示:

实现

根据这个思路:

[peripheral discoverServices:@[[CBUUID UUIDWithString:@"180A"]]];
[service discoverCharacteristics:@[[CBUUID UUIDWithString:@"2A23"]]];
[peripheral readValueForCharacteristic:characteristic]
NSString *value = [NSString stringWithFormat:@"%@",characteristic.value];
NSMutableString *macString = [[NSMutableString alloc] init];
[macString appendString:[[value substringWithRange:NSMakeRange(16, 2)] uppercaseString]];
[macString appendString:@":"];
[macString appendString:[[value substringWithRange:NSMakeRange(14, 2)] uppercaseString]];
[macString appendString:@":"];
[macString appendString:[[value substringWithRange:NSMakeRange(12, 2)] uppercaseString]];
[macString appendString:@":"];
[macString appendString:[[value substringWithRange:NSMakeRange(5, 2)] uppercaseString]];
[macString appendString:@":"];
[macString appendString:[[value substringWithRange:NSMakeRange(3, 2)] uppercaseString]];
[macString appendString:@":"];
[macString appendString:[[value substringWithRange:NSMakeRange(1, 2)] uppercaseString]];
//00:E0:4C:3F:14:DE                            

这里可一个大家推荐一个非常好用的蓝牙开发的库,跟CoreBluetooth的接口一摸一样,只是数据是用过block返回的,用起来更加的方便。MPBluetoothKit
Github地址

下面是写的MPBluetoothKit 获取Mac地址的代码

    CBUUID *macServiceUUID = [CBUUID UUIDWithString:@"180A"];CBUUID *macCharcteristicUUID = [CBUUID UUIDWithString:@"2A23"];[mPeripheral discoverServices:@[macServiceUUID] withBlock:^(MPPeripheral *peripheral, NSError *error) {if(peripheral.services.count){MPService *service = [peripheral.services objectAtIndex:0];[service discoverCharacteristics:@[macCharcteristicUUID] withBlock:^(MPPeripheral *peripheral, MPService *service, NSError *error) {for(MPCharacteristic *characteristic in service.characteristics){if([characteristic.UUID isEqual:macCharcteristicUUID]){[characteristic readValueWithBlock:^(MPPeripheral *peripheral, MPCharacteristic *characteristic, NSError *error){NSString *value = [NSString stringWithFormat:@"%@",characteristic.value];NSMutableString *macString = [[NSMutableString alloc] init];[macString appendString:[[value substringWithRange:NSMakeRange(16, 2)] uppercaseString]];[macString appendString:@":"];[macString appendString:[[value substringWithRange:NSMakeRange(14, 2)] uppercaseString]];[macString appendString:@":"];[macString appendString:[[value substringWithRange:NSMakeRange(12, 2)] uppercaseString]];[macString appendString:@":"];[macString appendString:[[value substringWithRange:NSMakeRange(5, 2)] uppercaseString]];[macString appendString:@":"];[macString appendString:[[value substringWithRange:NSMakeRange(3, 2)] uppercaseString]];[macString appendString:@":"];[macString appendString:[[value substringWithRange:NSMakeRange(1, 2)] uppercaseString]];NSLog(@"macString:%@",macString);}];}}}];}}];                          

是不是一个很方便库啊?当然这是小弟开源的一个库,如果喜欢的话就去Github帮忙star一下哈 ^_^

update 2016.1.7

因为有网友要求写一个例子,所以我写了一个DEMO放在Github上了
BluetoothMacAddressDemo


http://www.ppmy.cn/news/478712.html

相关文章

蓝牙各种版本的区别(推荐)

蓝牙各种版本的区别 蓝牙主要参数蓝牙各版本间区别 在我们的生活中,经常都会买到跟蓝牙功能相关的设备,比如耳机、音箱接收器等等,但是很多朋友对蓝牙却是知之甚少。不知道挑选蓝牙设备时应该看哪些参数,看完这篇科普帖你就都懂了…

iOS - Bluetooth 蓝牙

1、蓝牙介绍 具体讲解见 蓝牙技术信息 蓝牙协议栈 2、iBeacon 具体讲解见 BeaconiBeacon 是苹果公司 2013 年 9 月发布的移动设备用 OS(iOS7)上配备的新功能。其工作方式是,配备有低功耗蓝牙(BLE)通信功能的设备使用 B…

如何查看自己电脑蓝牙的版本?

蓝牙是一种短距离网络技术,可以让您将兼容设备(如耳机、音箱、鼠标或键盘等)以无线的方式连接到 Windows 10 PC。尽管在大部分情况下,用户无需担心所使用蓝牙适配器的版本,但有时为子用上特殊功能,您必需拥…

[蓝牙]蓝牙4.0 for iOS

用于IOS,更多说的是开发有关 目录 [隐藏] 1 更多研究2 发现3 调试用APP4 困扰5 NRF80026 一些研究 6.1 官方Demo 7 CC2540官方源码8 经验9 IOS的蓝牙4.0支持10 IOS库支持11 官方文档说法12 见识 12.1 [iOS][RCtank]在xcode的iOS虚拟机中对BLE(蓝牙4.0)进…

iOS蓝牙

iOS开发蓝牙4.0初识 转载 2015-09-18 21:21:42 标签: ios开发蓝牙 ios开发蓝牙4.0 ios开发蓝牙连接 ios开发蓝牙扫描 ios蓝牙4.0 防丢自拍器 车载仪表盘 针灸仪设备 ANCS实现的监控来电,短信&#xff0…

airpods版本号_airpods蓝牙版本是多少,苹果AirPods正式版使用评测

最高的版本为目前二代洛达1536u~949,没有之一! 关于目前的华强北AirPods,各个地方已经充满了各种经人蓄意捏造的不实信息,让很多人真假难辨,今天就来说一下华强北AirPods的真实情况到底是什么样子&#xff…

如何查询PC端的蓝牙Bluetooth版本

1. 进入设备管理器 2. 进入Bluetooth列表,右键打开Inter(R) Wireless Bluetooth(R)的properties 3. 查看信息: Advanced-> Firmware: LMPxx(Link Manager Protocol) 附对照表: ps: 蓝牙 4.0,又名蓝牙智能&#xff0…

蓝牙1.1~5.0不同版本特性简介

下面对现阶段主要版本蓝牙技术的特性做一个详细的介绍: 1、版本1.1: 传输率约在748~810kb/s,因是早期设计,容易受到同频率之间的类似通信产品干扰,影响通讯质量。这个初始版本支持Stereo音效的传输要求,但…