1

나는 지속적으로 실행하고 일부 주변 특성을 추적해야하는 응용 프로그램을 개발하고 있어요.CoreBluetooth "willRestoreState"- 정확히 수행해야 할 작업은 무엇입니까?

모든 전경에서 잘 작동합니다.
는 또한 백그라운드에서 작동하지만, 나는 제대로 수행하는 것이 확실하지 않다.

상태 복원 및 구현 willRestoreState에 대한 많은 게시물이 빨간색으로 표시되지만이 중 많은 메소드는이 메소드가 호출 될 때 수행 할 작업을 명시 적으로 표시하지 않습니다. 내가 만들고있어

과정은 다음과 같이 진행됩니다

내가

myCentralManager = 
     [[CBCentralManager alloc] initWithDelegate:self queue:nil 
     options:@{ CBCentralManagerOptionRestoreIdentifierKey: 
     @"myCentralManagerIdentifier" }]; 

는 여기에서 내가의 일정한 흐름하고있어 사용하여 중앙 관리자 만드는거야

:
대기를 에 연결> - -> 발견 서비스 -> 특성을 발견 ->는 charactristic 구독 - 내 주변에 대한 검사> - 중앙 관리자에 대해 (centralManagerDidUpdateState)에 받아보세요> 읽기 데이터

그럼 나는 몇 초를 기다리고

kill(getpid(), SIGKILL); 

를 사용하여 내 응용 프로그램을 죽이고, 그리고 내 주변에서 다시 광고를 시작합니다.

은 그럼 프로세스가 다시 살아 오는 것을 볼 수 있고, 내 로그는 AppDelegate에있는 didFinishLaunchingWithOptions 호출지고 있음을 보여준다.

나는 다음과 같이 중앙 관리자를 복원

NSArray *identifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey]; 

    if (identifiers && identifiers.count > 0) { 
     _centralManager = [[CBCentralManager alloc] initWithDelegate:self 
                   queue:nil 
                  options:@{CBCentralManagerOptionRestoreIdentifierKey:[identifiers objectAtIndex:0]}]; 
    } 

는 또한 willRestoreStatecentralManagerDidUpdateState 호출지고 있음을 볼 수 있습니다. 내가 잃었어요 여기 어디에

입니다. 다음에해야 할 일은 무엇입니까?

및 위와 같은 방법으로하지만 - -. 나는 내가 위에서 설명 된 일반 흐름 (일을 계속 해요 경우, 모두 잘 작동하는 것 같다 내가 옳은 일을하고 있는가

내가 뭔가를해야합니까? ?!? willRestoreState 예라면, 내가 사전에 기본적으로 이미 연결되어있는 주변 장치를받을 수가 있습니다

답변

0

감사를 어떻게해야 -. 당신은에 대한 참조를 저장하고 자신의 대리자를 설정해야이 내 코드, 꽤 똑바로 앞으로 :

,
  • (공극) centralManager (CBCentralManager *) 중앙 willRestoreState (NSDictionary와 *) 딕셔너리 {

    // 이미 OS에 의해 연결된 주변 장치의 핸들을 얻고 대리인 NSArray를 자신을 설정할 주변 장치 = dict [CBCentralManagerRestoredStatePeripheralsKey]; if (주변기기.카운트> 0) { CBPeripheral pr = 주변 장치 [0]; // 주변 요구 값 설정 및 서비스 검색 시작 [pr setDelegate : self]; [pr readRSSI]; [pr discoverServices : nil];

    } }

관련 문제