Podstawowe funkcje konserwacji i przywracania stanu Bluetooth Nie działają, Nie można ponownie uruchomić aplikacji w tle
Staram się, aby rdzeń bluetooth obudził aplikację, nawet jeśli nie działa.
Jak stwierdził Apple: „Ponieważ ochrona stanu i przywracanie stanu są wbudowane w Core Bluetooth, aplikacja może włączyć tę funkcję, aby poprosić system o zachowanie stanu centralnych i peryferyjnych menedżerów aplikacji i kontynuowanie wykonywania określonych zadań związanych z Bluetooth. w ich imieniu, nawet gdy aplikacja nie jest już uruchomiona. Gdy jedno z tych zadań zostanie zakończone, system ponownie uruchomi aplikację w tle i da aplikacji możliwość przywrócenia jej stanu i właściwego przeprowadzenia zdarzenia. "
Dodałem następujący kod, aby włączyć tę funkcję:
myCentralManager =
[[CBCentralManager alloc] initWithDelegate:self queue:nil
options:@{ CBCentralManagerOptionRestoreIdentifierKey:
@"myCentralManagerIdentifier" }];
Ale wywołania zwrotne, gdy aplikacja się obudzi, nigdy nie zostały uruchomione.
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
-(void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary *)state {
}
Tych dwóch nigdy nie nazywa się.
Sposób, w jaki testuję tę funkcję budzenia:
Dodam „bluetooth central” w trybie tła w info.plist, więc BLE działa w tle.
uruchom centralManager w moim telefonie iPhone nr 1. Rozpocznij skanowanie.
naciśnij przycisk home i wyjdź, zagraj w ciężką grę pamięci, w dzienniku debugowania zobaczę: „Zakończone z powodu ciśnienia pamięci. Proces zakończony kodem wyjścia 0”. Ma to na celu symulację sposobu, w jaki system ios kończy działanie aplikacji w tle z powodu presji pamięci.
uruchom sygnał nawigacyjny z innym telefonem iPhone nr 2 i rozpocznij nadawanie.
wynik: te wywołania zwrotne nigdy nie są wywoływane.
Jakieś pomysły, dlaczego to nie działa? Jeśli jest to problem z interfejsem API, czy jest jakieś inne podejście do ponownego uruchomienia aplikacji w tle za pomocą BLE, gdy telefon zbliża się do radia BLE? Próbowałem użyć ibeacon do wybudzenia aplikacji, ale główny centralny menedżer bluetooth nie pozwala na połączenie z ibeacon w tle.
Dzięki!