아무도 모르는 것 같았 기 때문에 iOS 개발자 계정을 구입하고 몇 가지 실험을 수행했습니다. 내가 찾은 내용은 다음과 같습니다.
포 그라운드에서 실행하는 경우 CBCentralManager :: scanForPeripheralsWithServices를 사용하여 스캔을 시작할 수 있습니다. 스캔은 특정 서비스를 광고하는 장치 로 제한 되거나 제한되지 않을 수 있습니다 (해당 호출의 매개 변수에 대해 nil 전달). 또한 중복을 허용 하거나 허용하지 않을 수 있습니다 . 전자의 경우 iPhone이 광고 패킷을 수신 할 때마다 didDiscoverPeripheral 콜백을 받게됩니다. 후자의 경우 발견 된 장치 당 하나의 콜백 만받습니다.
배경에 들어가면 규칙은 다음과 같이 나타납니다.
- 무제한 검사를 실행 중이라면 자동으로 취소됩니다. didDiscover 콜백을받지 않습니다.
- 스캔이 제한된 경우 (예 : 찾고 있던 하나 이상의 서비스 UUID를 지정한 경우) 스캔은 계속 실행되지만 중복 허용 플래그는 무시 됩니다. 즉, 이제 새 장치에 대한 didDiscoverPeripheral 콜백 만 받게 됩니다. 전경에있는 동안 모든 장치가 표시되면 콜백이 전혀 수신되지 않습니다.
- 스캔을 시작하고 중지 해도 새 장치로 간주되는 장치는 재설정 되지 않습니다 . 하나의 장치가있는 경우 다음을 제외하고는 여러 스캔에 걸쳐 단일 콜백 만받습니다.
- 이 경우 연결 장치에, 다음 분리 한 후 다시 스캔 장치 (즉 당신이 didDiscoverPeripheral에 한 번 더 전화를 얻을 것이다) 다시 열거됩니다. 나는 iOS가 그것을 장치에 "관심을 보인"것으로 간주한다고 생각한다.
연결이 불가능한 장치 (예 : 근접 프로필을 구현하는 BLE 광고주와 같은 BLE 광고주)에 대한 연결 시도가 내 예제 장치를 연결할 수 있기 때문에 충분한 지 모르겠습니다. 그러나 적어도 연결 가능한 장치의 경우이 검색 / 연결 / 연결 끊기 / 검색 절차는 백그라운드에서 장치의 존재를 폴링하는 데 충분합니다.
위의 결과는 iOS 5.0.1을 실행하는 iPhone 4S를 사용하여 수집되었습니다.