2013-11-24 102 views
2

我正在使用Nordic BLE nRF8001開發套件來測試CoreBluetooth。使用CBCentralManager的方法(例如didDiscoverPeripheral(),didConnectPeripheral()等)我的iPhone 5能夠檢測北歐設備的廣告並連接到它就好了。但是,我沒有收到來自新的locationManager範圍或regionMonitoring方法的任何響應。下面我將解釋我的設置:locationManager:didRangeBeacons方法未檢測到BLE設備

1.)首先,我使用傳入的外圍設備(我的Nordic設備)從我的Nordic設備在didDiscoverPeripheral()委託方法中檢索到我的NSUUID。我爲我的北歐設備創建了一個自定義服務,因此假設這個外設是北歐設備。要檢索NSUUID我用:

NSUUID *uuid = [peripheral identifier]; 
    NSString *uuidString = [uuid UUIDString]; //uuidString = 9A8D4C73-152D-BBDA-E4C2-9CE952654645 

2)接下來,我創建一個燈塔區域爲我北歐設備,並創建CLLocationManager:

self.locationManagerBeacon = [[CLLocationManager alloc] init]; 
    [self.locationManagerBeacon setDelegate:self]; 
    NSUUID *myUUID = [[NSUUID alloc] initWithUUIDString:@"9A8D4C73-152D-BBDA-E4C2-9CE952654645"]; 
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:myUUID 
                 identifier:@"nordicRegion"]; 
    self.beaconRegion.notifyEntryStateOnDisplay = YES; 

3)現在我開始監測信標區域

[self.locationManagerBeacon startRangingBeaconsInRegion:self.beaconRegion]; 

4)問題:的LocationManager:didRangeBeacons:inRegion被調用,但標區域始終是空的。

問題: 是否需要以某種方式配置北歐BLE設備,以便新的locationManager信標方法能夠檢測到它(例如,BLE廣告頻率,功率級別等)?如果是這樣,有人可以指向我的文檔。

感謝幫助!

+0

所以,愚蠢的問題:你使用的是實際的iBeacon?或者只是一個任意的BTLE設備?只有廣播iBeacon配置文件的BTLE設備纔會被視爲「iBeacon」。 –

+0

我不知道你是否可以分享你的配置/配置文件/示例代碼來設置nrf8001廣告作爲iBeacon。 – joshperry

回答

6

我一直認爲,爲了使用信標範圍,你必須先啓動信標監測:

[theLocManager startMonitoringForRegion: region1]; 
[theLocManager startRangingBeaconsInRegion: region1]; 

該代碼工作得很好,我(加上你一樣,我也設置notifyEntryStateOnDisplay = YES )。

試試看看它是否有所作爲。如果不這樣做,我會說你在廣播的BLE數據包中出現了一些問題,以作爲信標廣告。

您也可以嘗試下載Apple的AirLocate演示程序(它將同時監聽信標並將您的iOS設備轉變爲燈標)。您可以使用AirLocate來查看它是否能將您的自定義BLE設備識別爲燈標。如果確實如此,請使用AirLocate作爲信標進行傳輸,然後查看您的代碼是否可以識別它。

+0

BLE廣告數據包結構是個問題 - 很好的調用。對於任何有此問題的人,請參閱此[post](http://stackoverflow.com/questions/18906988/what-is-the-ibeacon-bluetooth-profile)。 – CaseyG

+0

最佳答案總是讚賞。 :) –

0

我發現,有時具有一個空字符串(@「」)作爲標識符將導致相同的親

region = [[CLBeaconRegion alloc] initWithProximityUUID:UUID identifier:[UUID UUIDString]]; 

希望幫助

Z.

0

由於鄧肯意見徵求關於「BLE包中的錯誤」。我剛剛使用了我剛剛購買的一些Estimote信標。我也回來了一個空陣列。當我使用Estimote iOS應用程序連接到它們時,它顯示Estimote操作系統已過時。我使用該應用來更新信標,他們開始在陣列中顯示給我。

0

根據我的經驗,也有如果你跟着鄧肯的指示,它仍然無法正常工作,可能出問題的幾件事情:

  • 您創建需要有唯一的標識符,如果你是CLBeaconRegion監測多個地區。如果它們不是唯一的,則將調用didRangeBeacons將空數組信標。
  • 您不應該在dispatch_async區塊中調用startMonitoringForRegionstartRangingBeaconsInRegion
  • 如果仍然失敗,請檢查您的實施centralManagerDidUpdateState,如果您看到CBCentralManagerStatePoweredOn,則重置監控。