Здравствуйте, я пытаюсь настроить наблюдателя магазина работоспособности с включенной доставкой фона. Моя проблема в том, что он ничего не будет делать, когда экран заблокирован. Я упростил свой код для этого вопроса, чтобы добраться до точки :) У меня есть HealthKit в моем plist, и я принял счет шага типа HealthStore. Все в порядке, когда приложение открыто и когда экран не заблокирован. Но когда экран заблокирован, я не получаю никаких наблюдений. Для целей тестирования частота установлена на немедленную.HealthStore enableBackgroundDelivery, когда экран заблокирован
Мой код выглядит следующим образом
- (void)setupHealthStore{
if ([HKHealthStore isHealthDataAvailable])
{
NSSet *readDataTypes = [self dataTypesToRead];
self.healthStore = [[HKHealthStore alloc]init];
[self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes completion:^(BOOL success, NSError *error)
{
if (success)
{
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
[self.healthStore enableBackgroundDeliveryForType:quantityType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error)
{
if (success)
{
[self setupObserver];
}
}];
}
}];
}
}
Описанный выше метод вызывается в AppDelegate didfinishLaunchWithOptions
Следующий метод
- (void)setupObserver{
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKObserverQuery *query = [[HKObserverQuery alloc]initWithSampleType:quantityType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error)
{
if (!error)
{
[self alarm];
if (completionHandler)
{
NSLog(@"Completed");
completionHandler();
}
}
else
{
if (completionHandler)
{
completionHandler();
}
}
}];
[self.healthStore executeQuery:query];
}
Когда я открываю приложение, он немедленно возвращает наблюдение.
Посмотрите на мой ответ здесь: http://stackoverflow.com/a/35073904/1677480 – damirstuhec