2014-10-18 50 views
0

我在ios中使用核心藍牙框架和掃描和發現2特徵ID,但我希望他們的順序是不同的,那麼我所得到的是這樣改變他們的順序或任何程序化?如何更改掃描外圍設備使用核心bleutooth時發現的特徵ID的順序我ios

代碼

if (service.UUID.isEqual(CBUUID.UUIDWithString("F4F2-BC76-3206341A"))) 
    { 
     println(service.characteristics.count) 
     for aChar:CBCharacteristic in service.characteristics as [CBCharacteristic] 

     { 
      println(aChar) 
      println(aChar.UUID) 

      /* Write data*/ 
      if aChar.UUID.isEqual(CBUUID.UUIDWithString("D0F0AECD-6405-0B040047")) 
      { 
       var str:NSString = "heyaa..!!" 
       data = str.dataUsingEncoding(NSUTF8StringEncoding)! 
       peripheral.writeValue(data, forCharacteristic: aChar, type: CBCharacteristicWriteType.WithResponse) 
       println("Write performed") 
      } 

      /* read data */ 
      if aChar.UUID.isEqual(CBUUID.UUIDWithString("C8853E-A248-C6F0B1")) 
      { 
       peripheral.readValueForCharacteristic(aChar) 
       println("Read performed") 
      } 
     } 
    } 

在讀取數據這一特點ID獲取調用第一,但我想先請寫數據的特點ID那麼,有沒有辦法來解決。請幫助我。先謝謝你。

回答

0

這些特徵將以任意的和未定義的順序被發現,但這應該不重要。

您應該存儲對發現特徵的引用,以便您可以根據需要寫入它們。

你的應用程序應該通過不同的階段

  1. 掃描並發現周邊廣告特定服務(S)
  2. 連接到目標外圍
  3. 發現該服務的特點
  4. 讀/根據需要寫入數據 - 根據需要重複此步驟
  5. 斷開連接

例如:

var writeCharacteristic : CBCharacteristic? 
    var readCharacteristic : CBCharacteristic? 

    optional func peripheral(_ peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!,error error: NSError!) {  

     if (service.UUID.isEqual(CBUUID.UUIDWithString("F4F2-BC76-3206341A"))) 
     { 

     println(service.characteristics.count) 
     for aChar:CBCharacteristic in service.characteristics as [CBCharacteristic] 

     { 
      println(aChar) 
      println(aChar.UUID) 

      /* Write data*/ 
      if aChar.UUID.isEqual(CBUUID.UUIDWithString("D0F0AECD-6405-0B040047")) 
      { 
       self.writeCharacteristic=aChar 
      } 
      else if aChar.UUID.isEqual(CBUUID.UUIDWithString("C8853E-A248-C6F0B1")) 
      { 
       self.readCharacteristic=aChar 

      } 
     } 
     } 
     if (self.writeCharacteristic != nil && self.readCharacteristic != nil) { 
      var str:NSString = "heyaa..!!" 
      data = str.dataUsingEncoding(NSUTF8StringEncoding)! 
      peripheral.writeValue(data, forCharacteristic: self.writeCharacteristic!, type: CBCharacteristicWriteType.WithResponse) 
      println("Write performed") 
     } 
    } 

    optional func peripheral(_ peripheral: CBPeripheral!,didWriteValueForCharacteristic characteristic: CBCharacteristic!,error error: NSError!) { 
     peripheral.readValueForCharacteristic(self.readCharacteristic!) 
     println("Read performed") 
    } 
+0

我的懷疑是沒有硬件的特性ID獲得按字母順序掃描?像第一個「C882」,然後是「D889」。它沒有以任何方式發現它有固定的秩序。 – 2014-10-18 08:52:18

+0

我想先識別ID「D889」,然後發現其他ID「C882」,我該怎麼辦?請幫幫我。 – 2014-10-18 09:01:23

+0

您無法控制發現特徵的順序,也不應該擔心。您需要構建代碼,以便順序無關緊要。 – Paulw11 2014-10-18 10:07:51

相關問題