iOS學習筆記之藍芽(有關藍牙裝置mac地址處理) 2

來源:互聯網
上載者:User

標籤:seq   一個   duplicate   uppercase   char   tis   mat   uuid   read   

1.建立中心裝置,並設定代理

一般情況下,手機是中心裝置,藍牙裝置是外圍裝置。

self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

1.建立之後,會進入到改變藍芽狀態的代理方法中。
  • (void)centralManagerDidUpdateState:(CBCentralManager *)central;
    ```
    在這個方法中,可以判斷藍芽的狀態,進行相應的操作。
CBCentralManagerStateUnknown = CBManagerStateUnknown,CBCentralManagerStateResetting = CBManagerStateResetting,CBCentralManagerStateUnsupported = CBManagerStateUnsupported,CBCentralManagerStateUnauthorized = CBManagerStateUnauthorized,CBCentralManagerStatePoweredOff = CBManagerStatePoweredOff,CBCentralManagerStatePoweredOn = CBManagerStatePoweredOn,

2.當藍芽的狀態是開啟的時候,開始掃描外圍裝置。如果藍芽支援後台模式,那麼要指定服務的UUID,否則在後台斷開之後,串連不上藍芽,不支援背景話,就設定成nil。option:CBCentralManagerScanOptionAllowDuplicatesKey 如果為YES,會讓中心裝置不斷的監聽外部裝置的訊息,NO則不能。如果為YES可能會很耗電,根據需求設定就好。

if (central.state == CBCentralManagerStatePoweredOn) {        [self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kServiceUUID]] options:nil];    }

3.當掃描到外圍裝置的時候,就會進入下面方法。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary<<span style="color: #00b1ff">NSString *,id> *)advertisementData RSSI:(NSNumber *)RSSI;

在這個方法中,我們可以根據不同的條件來篩選我們需要串連的外圍裝置,我這邊是根據名字來篩選的。匹配到你需要的裝置之後,就開始串連這個裝置了。

if ([peripheral.name isEqualToString:kPeripheralName]) {        peripheral.delegate = self;        self.selectedPeripheral = peripheral;        // 開始串連裝置        [self.centralManager connectPeripheral:self.selectedPeripheral options:nil];    }

4.串連成功和失敗都會進入代理方法。

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error ;- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;
這裡暫停一下,

如果你附近就一個需要串連的藍芽,那麼直接判斷名字來串連就好了,但是如果像藍芽鎖這種,附近可能名字一樣的藍芽有很多,那麼你怎麼知道你要串連的是哪一個藍芽呢?那麼,在這個時候,就要根據藍芽的mac地址來區分了。因為iOS7之後,蘋果就無法擷取裝置的mac地址,所以現在的藍芽大部分是將藍芽的mac地址寫在藍牙裝置系統的sevrice裡面,一般UUID是180A(Device Information),而特徵的UUID 是2A23(System ID)。根據你需要串連的藍芽的mac地址,來串連。
好了繼續剛才說的,掃描相應的特徵。

for (CBService *service in peripheral.services) {        if ([service.UUID isEqual:[CBUUID UUIDWithString:@"180A"]]) {            [self.selectedPeripheral discoverCharacteristics:nil forService:service];        }    }

5.掃描到特徵之後,進入代理方法

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;```在這裡就可以進行讀寫的操作了。讀資料有兩種方式,一種是read,一種是notify。我們可以用LightBlue來看到這個特徵是否是支援notify,一般固定不變的資料都是用read,會有改變的資料用notify。

for (CBCharacteristic *characteristic in service.characteristics) {
if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"2A23"]]) {
// 這裡是讀取Mac地址,資料固定,用readValueForCharacteristic,不用setNotifyValue:setNotifyValue
[self.selectedPeripheral readValueForCharacteristic:characteristic];
}
}

6.讀取到資料的時候,進入代理方法。
  • (void)peripheral:(CBPeripheral )peripheral didUpdateValueForCharacteristic:(CBCharacteristic )characteristic error:(NSError *)error;
    ```

在這雷根據公司定下的資料規則來解析資料就好了。
我這邊把mac地址的解析出來了,當例子來看吧。

 NSString *orStr = characteristic.value.description;if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"2A23"]]) {        NSMutableString *macString = [[NSMutableString alloc] init];        [macString appendString:[[orStr substringWithRange:NSMakeRange(16, 2)] uppercaseString]];        [macString appendString:@":"];        [macString appendString:[[orStr substringWithRange:NSMakeRange(14, 2)] uppercaseString]];        [macString appendString:@":"];        [macString appendString:[[orStr substringWithRange:NSMakeRange(12, 2)] uppercaseString]];        [macString appendString:@":"];        [macString appendString:[[orStr substringWithRange:NSMakeRange(5, 2)] uppercaseString]];        [macString appendString:@":"];        [macString appendString:[[orStr substringWithRange:NSMakeRange(3, 2)] uppercaseString]];        [macString appendString:@":"];        [macString appendString:[[orStr substringWithRange:NSMakeRange(1, 2)] uppercaseString]];}

7.寫入資料

iOS學習筆記之藍芽(有關藍牙裝置mac地址處理) 2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.