2016-02-18 197 views
0

IOS應用程序正在使用Core-Bluetooth框架與BLE外設進行通信。該應用程序已註冊葡萄糖特徵,每隔一分鐘後即會從外設接收數據。IOS BLE連接連續斷開

觀察到,當應用程序處於空閒狀態時,不會從BLE外設斷開連接,而如果我在應用程序中的ViewControllers之間導航,則會發生與BLE外設不斷斷開的情況。

連接參數設置在Apple Core-Bluetooth編程指南中提到的給定範圍內。任何想法爲什麼連接不斷斷開?

我還使用了Apple開發人員網站中的BTLE Transfer Source Code。並用Glucose服務UUID替換了Transfer服務UUID。我已經在iOS版本8.3上對iPhone 6進行了測試。我仍然面臨同樣的斷線問題。

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { 

    if (self.discoveredPeripheral != peripheral) { 
     self.discoveredPeripheral = peripheral; 

     [self.centralManager connectPeripheral:peripheral options:nil]; 
    } 
} 


-(void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { 

    [self.centralManager stopScan]; 
    [self.data setLength:0]; 

    peripheral.delegate = self; 
    [peripheral discoverServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]]]; 

} 
+0

SONAL,無需任何代碼它有點開放的問題,你需要發佈代碼。 – user3069232

+0

您的BLE「經理」是單身人士嗎?你的應用架構如何? – Larme

+0

是BLE管理器是單身人士。我正在使用Swift開發應用程序。外圍對象被保留 – sonal

回答

0

檢查你沒有明確使用weak屬性來管理您的外圍設備(默認類型是strong),檢查此issue

但是沒有任何代碼,我可以建議抓住一個BLE packet sniffer並查看誰,何時以及爲什麼發送斷開連接命令。在這個過程中要注意頻道跳頻,你有三分之一的機會用嗅探器捕捉頻道,所以只需重試,直到你看到屏幕上的數據流。如果不是現在,如果您經常使用低功耗藍牙,那麼總是會歡迎擁有這樣的設備。

0
// method called whenever you have successfully connected to the BLE peripheral 
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral 
{ 
    self.myPeripheral = peripheral; 
    self.myPeripheral.delegate = self; 
    NSString *connected = [NSString stringWithFormat:@"Connected: %@", peripheral.state == CBPeripheralStateConnected ? @"YES" : @"NO"]; 
    NSLog(@"%@", connected); 
} 

將這個方法, 注:這是分配你發現周圍的保留CBPeripheral到centralManager一個很好的做法:didConnectPeripheral

//this one line code stops disconnecting device automatically. 
    [[Manager sharedManager].connected_PeripheralDevice discoverServices:nil];