1

Problem statement : 내 말미에 여러 개의 BLE가있는 경우 하나씩 차례로 연결합니다. 하지만 지금은 1 BLE 이상 범위 밖으로 나가서 내가 코어 블루투스 프레임 워크의 중앙 관리자에서 국가를 감지 할 수없는 오전.여러 BLE가 동시에 범위를 벗어나는 것을 감지하는 가장 좋은 방법은 무엇입니까?

설명 - 난 단일 BLE을 가지고 있고 그 BLE에 연결하는 경우, 그 BLE 범위를 벗어날 때 주변의 - (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error 메소드를 호출

1)

.

2) - (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error 메서드에서 나는 BLE이 다시 범위에 올 때마다 연결되도록 - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral을 호출했습니다.

3)이 동작은 단일 BLE가 한 번에 범위를 벗어날 때 유용합니다. 범위 안에 올 때 다시 연결하십시오.

4)하지만 위의 동작은 둘 이상의 BLE가 동시에 범위를 벗어날 때 제대로 작동하지 않습니다.

여기 내 - (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error 코드 사전에

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error { 

    [self.btMainDashboardViewController.tagsTableView reloadData]; 

     for (CBPeripheral *peripheral in self.btMainDashboardViewController.app.addedTagsArray) { 
    if (peripheral.state == CBPeripheralStateDisconnected) { 
     // if tag is not released go for autoconnection 
     [self.centralManager connectPeripheral:peripheral options:nil]; 
    } 
    } 
} 

감사합니다.

+0

CBCentralManager에서 여러 개의 보류중인 '연결'작업을 수행해도 작동하지 않는다고 말씀 하시겠습니까? 'didDisconnectPeripheral'에 대한 코드를 보여줄 수 있습니까? – Paulw11

답변

0

BLE 연결과 각 콜백에 의존하는 것은 장치가 범위를 벗어 났는지 확인하는 올바른 방법이 아닙니다. 연결은 언제든지 OS 또는 다른 장치에 의해 취소 될 수 있기 때문에.

중복 된 BLE 스캐닝을 사용하고 RSSI (신호 강도)를 통해 장치를 추적하는 것이 좋습니다. 사용 사례에 따라 RSSI가 임계 값 이하로 떨어지거나 장치 검색을 중지했을 때 장치가 범위를 벗어 났는지 확인할 수 있습니다.

희망이 도움이됩니다.