iOS如果获取蓝牙Mac地址

来源:互联网 发布:php 类 应用 编辑:程序博客网 时间:2024/05/16 09:49

目录(?)[+]

在做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)。如下图所示: 

实现

根据这个思路:

<code class="language-object-c hljs lua has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">[peripheral discoverServices:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">[[CBUUID UUIDWithString:@"180A"]]</span>];[service discoverCharacteristics:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">[[CBUUID UUIDWithString:@"2A23"]]</span>];[peripheral readValueForCharacteristic:characteristic]NSString *value = [NSString stringWithFormat:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"%@"</span>,characteristic.value];NSMutableString *macString = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">[[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                            </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>

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

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

<code class="language-object-c hljs cs has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">    CBUUID *macServiceUUID = [CBUUID UUIDWithString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"180A"</span>];    CBUUID *macCharcteristicUUID = [CBUUID UUIDWithString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"2A23"</span>];    [mPeripheral discoverServices:@[macServiceUUID] withBlock:^(MPPeripheral *peripheral, NSError *error) {        <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(peripheral.services.count){            MPService *service = [peripheral.services objectAtIndex:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>];            [service discoverCharacteristics:@[macCharcteristicUUID] withBlock:^(MPPeripheral *peripheral, MPService *service, NSError *error) {                <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(MPCharacteristic *characteristic <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">in</span> service.characteristics){                    <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([characteristic.UUID isEqual:macCharcteristicUUID]){                        [characteristic readValueWithBlock:^(MPPeripheral *peripheral, MPCharacteristic *characteristic, NSError *error){                            NSString *<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> = [NSString stringWithFormat:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"%@"</span>,characteristic.<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span>];                            NSMutableString *macString = [[NSMutableString alloc] init];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            [macString appendString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@":"</span>];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            [macString appendString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@":"</span>];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            [macString appendString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@":"</span>];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            [macString appendString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@":"</span>];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            [macString appendString:<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@":"</span>];                            [macString appendString:[[<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">value</span> substringWithRange:NSMakeRange(<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>)] uppercaseString]];                            NSLog(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">@"macString:%@"</span>,macString);                        }];                    }                }            }];        }    }];                          </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>

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

update 2016.1.7

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 班级差生太多怎么办 初三孩子英语差怎么办 初三英语基础差怎么办 学生学习效率低怎么办 摔伤后皮下血肿怎么办 孩子学习效率低怎么办 很多作业没写完怎么办? 小学孩子成绩差怎么办 孩子脚上起水泡怎么办 小学一年级体育课哑铃怎么办 托福成绩失效后怎么办 去外国旅游不适应怎么办 一年级语文成绩差怎么办 一年级小孩成绩差怎么办 一年级小孩基础差怎么办 一年级小孩语文差怎么办 一年级小孩数学差怎么办 一年级小孩理解能力差怎么办 一年级小孩作文差怎么办 一年级小孩记忆力差怎么办 孩子的记忆力不好怎么办 孩子记忆力不好怎么办呢 小学三年级学生不听话怎么办 司法考试成绩单没打印怎么办 高一200分怎么办 初一孩子语文差怎么办 大学专业没选好怎么办 减肥口渴的厉害怎么办 开胸手术后胸闷气短怎么办 打游戏上网成瘾怎么办 老公打游戏成瘾怎么办 我老是沉迷游戏怎么办 18孩子沉迷游戏怎么办 志愿提交码丢失怎么办 幼儿园报名没进怎么办 考完教师资格证怎么办 两套房改房怎么办 cad打开无响应怎么办 高中生脸上痘痘怎么办 孩子玩心太大怎么办 开会听不懂讲什么怎么办