@GoreDefex Пожалуйста, посмотрите на вопрос. Мне тоже нужен ответ на тот же вопрос: stackoverflow.com/questions/47813624
имаюсь этим более 3 месяцев и выдергиваю волосы. Поэтому, пожалуйста, не отвечайте новичкам.
Мне интересно, есть ли в 2017 году с iOS 10+ ЛЮБОЙ способ вывести приложение из завершенного состояния ... предпочтительно через периферийное устройство Bluetooth ... но я возьму то, что смогу получить!Я считаю прекращено, когдапользователь пролистал приложение в диспетчере задач или когда периферийное устройство включено / выключено, и приложение уже было мертвым
Мне нужны важные периферийные данные BT, связанные со здоровьем (записанные устройством BT), которые хранятся в приложении, поэтому мне нужно постоянное соединение или возможность восстановить приложение и обработать данные. Я знаю, что об этом часто спрашивают, поэтому я пытаюсь найти наиболее актуальное понимание или решения этой проблемы. Я прочитал ооочень много статей и С.О. сообщения об этом, так что я знаю, что Core Bluetooth ненадежен в лучшем случае. Я знаю, что общая концепция ненадежна, и люди говорят, что с 2010 года это невозможно. Однако в iOS многое меняется, поэтому я надеялся, что что-то изменится.
Чтобы было ясно:
Пробуждение по протоколу BT было бы замечательно, но на самом деле оно не было надежным, поэтому ... Я возьму ЛЮБОЙ вид надежного пробуждения (местоположение, аудио, BT и т. Д., Но НЕ iBeacon, поскольку я подключен / подключен к устройству BT) , Если мне придется «взломать» пробуждение, чтобы оно произошло на месте или аудио, а затем как-то быстро получить данные с периферийного устройства, я возьму это!
Я пытался:(Пропустите это, если вы не заботитесь или не применимы)
Фоновый центральный режим включен в info.plistИспользуя полное восстановление состояния, то есть этот код ...
self.centralManager = [[CBCentralManager alloc] initWithDelegate:self
queue:nil
options:@{CBCentralManagerOptionShowPowerAlertKey: @(YES),
CBCentralManagerOptionRestoreIdentifierKey:@"MyDevice"}];
Чтобы зарегистрировать идентификатор ключа и этот код ...
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"launch options found: %@", launchOptions);
NSArray *centralManagerIdentifiers = launchOptions[UIApplicationLaunchOptionsBluetoothCentralsKey];
NSLog(@"central managers found in launch options: %@", centralManagerIdentifiers);
[self triggerLocalNotification:[NSString stringWithFormat:@"central managers found in launch options: %@", centralManagerIdentifiers]];
if([centralManagerIdentifiers count] > 0) {
for(NSString *identifier in centralManagerIdentifiers) {
if([identifier isEqualToString:@"MyDevice"]) {
[self triggerLocalNotification:[NSString stringWithFormat:@"Identifier found: %@", identifier]];
self.bluetoothManager = [BluetoothMgr sharedInstance];
}
}
}
return YES;
}
- (void)centralManager:(CBCentralManager *)central
willRestoreState:(NSDictionary<NSString *,id> *)state {
NSLog(@"************** RESTORED STATE BT **************");
[self triggerCustomLocalNotification:@"************** RESTORED STATE BT **************"];
NSLog(@"central manager object: %@", central);
NSLog(@"state dictionary: %@", state);
[self triggerCustomLocalNotification:[NSString stringWithFormat:@"state dictionary: %@", state]];
NSArray *restoredPeripherals = [state objectForKey:@"CBCentralManagerRestoredStatePeripheralsKey"];
self.centralManager = central;
self.centralManager.delegate = self;
if([restoredPeripherals count] > 0) {
for(CBPeripheral *peripheral in restoredPeripherals) {
if([peripheral.name rangeOfString:@"mybox-"].location != NSNotFound) {
NSLog(@"Restoring mybox Box: %@", peripheral);
[self triggerCustomLocalNotification:[NSString stringWithFormat:@"Peripheral was found in WILL RESTORE STATE! it was: %@", peripheral]];
self.myPeripheral = peripheral;
self.myPeripheral.delegate = self;
[self connectToDevice];
return;
}
}
}
}
Для восстановления центрального управляющего государством. Это работает только тогда, когда приложение убито iOS или состояние изменено. Не работает, когда пользователь убивает приложение.
Подписка на уведомляющую характеристику в устройстве (я создал эту пользовательскую характеристику и полностью контролирую программирование устройства) ... это работает очень хорошо, но не всегда вызывает пробуждение приложения. Хорошо работает в фоновом режиме, хотя. Просто не прекращено.
Попытка полностью отключиться после завершения, чтобы я мог использовать iBeacon, чтобы разбудить ... слишком много обручей, и в конце концов он не работает надежно вообще.Значительные обновления местоположения ... крайне ненадежныйЗапись звука ... нет методов запуска, когда он начинает запись (что я мог найти в любом случае) или методы, которые запускаются периодически во время записи