Nehmen wir an, wir verwenden Schrittzähler als Auslöser - wenn der Benutzer 10 Schritte unternimmt, möchte ich eine Benachrichtigung zu Pop sag es so.HealthKit: Erhalten einer Benachrichtigung ausgelöst durch körperliche Aktivität, Hintergrund und abgeschlossenen Zustand (Obj-C, iOS 10.3)
Diese Frage wurde beantwortet: Healthkit background delivery when app is not running
aber ich habe es nicht in der Lage gewesen, zu arbeiten. Wenn ich mit der App im Vordergrund herumlaufe, wird die Schrittzahl aktualisiert. Wenn ich die App im Hintergrund belasse, scheint die Anzahl der Schritte erst nach dem Öffnen der App aktualisiert zu werden. Die Hintergrundabfrage scheint also nicht zu funktionieren.
Ich habe versucht, Hintergrundmodi zu aktivieren, kein Effekt; Ich habe versucht, die App für mehrere Stunden im Hintergrund zu lassen und dachte, es könnte eine Weile dauern, bis die Daten gesendet werden - nichts.
Jemand anderswo hat gesagt, dass er StatisticsCollectionQuery ausprobieren soll, weil StatisticsQuery kaputt war - keine Wahrheit? StatisticsCollectionQuery ist nicht wirklich ideal für das, was ich mache.
Hier ist meine Abfrage-Code:
[self.healthStore enableBackgroundDeliveryForType:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]
frequency:HKUpdateFrequencyImmediate
withCompletion:^(BOOL success, NSError * _Nullable error) {
if (error) {
// Perform Proper Error Handling Here...
NSLog(@"*** An error occured while setting up background updates. %@ ***",
error.localizedDescription);
}
if (success == YES) {
backgroundEnabled = YES;
}
}];
// set up running observer
HKSampleType *sampleType =
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKObserverQuery *query =
[[HKObserverQuery alloc]
initWithSampleType:sampleType
predicate:nil
updateHandler:^(HKObserverQuery *query,
HKObserverQueryCompletionHandler completionHandler,
NSError *error) {
if (error) {
// Perform Proper Error Handling Here...
NSLog(@"*** An error occured while setting up the stepCount observer. %@ ***",
error.localizedDescription);
// Error popup
return;
}
// Take whatever steps are necessary to update your app's data and UI
// This may involve executing other queries
[self updateDailyStepCount];
// If you have subscribed for background updates you must call the completion handler here.
completionHandler();
}];
[self.healthStore executeQuery:query];
Ich habe HKUpdateFrequencyImmediate nur verwendet, um das schnellste Ergebnis zu erhalten, aber ich weiß, dass es standardmäßig auf stündlich eingestellt ist, kann ich versuchen, das zu ändern. Ich rufe die Abfrage in der Anwendung auf: didFinishLaunchingWithOptions. Ich lese die Diskussion, es heißt, Sie müssen CompletionHandler einmal aufrufen, und ich tat das (die drei Mal ist etwas anderes). – Adam
Sorry, nur dreimal gemeint, wenn iOS dich dreimal fragt und du nicht antwortest, dann hört es auf dich zu fragen. Aber du scheinst schon oben drauf zu sein. –