Core Bluetooth Preservação e Restauração do Estado Não Funciona, Não é Possível Liberar o Aplicativo em Segundo Plano
Estou tentando fazer com que o core bluetooth acorde o aplicativo mesmo quando ele não está em execução.
Como a Apple declarou: "Como a preservação e a restauração do estado são incorporadas ao Core Bluetooth, seu aplicativo pode optar por esse recurso para pedir ao sistema que preserve o estado dos gerentes centrais e periféricos do seu aplicativo e continue a executar determinadas tarefas relacionadas ao Bluetooth Em seu nome, mesmo quando seu aplicativo não está mais em execução. Quando uma dessas tarefas é concluída, o sistema reinicia seu aplicativo em segundo plano e dá ao seu aplicativo a oportunidade de restaurar seu estado e manipular o evento adequadamente. "
Eu adicionei o código a seguir para ativar esse recurso:
myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
Mas os retornos de chamada quando o aplicativo é ativado nunca foram acionados.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary *)state {
}
Esses dois nunca são chamados.
A maneira como estou testando essa função de ativação:
Eu adiciono "bluetooth central" no modo background em info.plist, então o BLE é executado em segundo plano.
inicie o centralManager no meu iphone No.1. inicia escaneamento.
pressione home e saia, jogue algum jogo pesado de memória, no log de depuração eu verei: "Terminado devido à pressão da memória. Processo finalizado com o código de saída 0". Isso é para simular como o sistema ios encerra o aplicativo de segundo plano devido à pressão da memória.
inicie um beacon com outro iphone No.2 e inicie a transmissão.
Resultado: aqueles callbacks de relançamento nunca são chamados.
Alguma idéia porque isso não está funcionando? Se é um problema de API, existe alguma outra abordagem para relançar seu aplicativo em segundo plano com o BLE quando o smartphone chega perto do BLE? Eu tentei usar o ibeacon para ativar o aplicativo, mas o principal gerenciador central do bluetooth não permitirá que você se conecte ao ibeacon em segundo plano.
Obrigado!