Tôi đang viết một ứng dụng đơn giản để theo dõi nhịp tim (HKQuantityTypeIdentifierHeartRate) từ HealthKit bất cứ khi nào giá trị tỷ lệ sức khỏe mới được ghi vào HealthKit.Theo dõi nhịp tim từ HealthKit -> HKAnchoredObjectQuery chỉ được gọi sau applicationDidBecomeActive (BUG hoặc FEATURE?)
Như đã thấy tại WWDC2015 (phiên 203) Tôi đang sử dụng HKAnchoredObjectQuery nên hoạt động để thêm và xóa đối tượng. Bất cứ khi nào tôi khởi động ứng dụng, tôi đang gọi số HKQuery cho các đối tượng mới nhất và thực thiTrình đơn hoạt động tốt !!! Nhưng tôi không nhận được mẫu mới ngay cả khi các mẫu có ở đó, nhưng nếu tôi mang ứng dụng về phía sau và một lần nữa đến nền trước, tôi sẽ nhận được tất cả các nhịp tim mới. IS LÀ BUG? Hoặc tôi phải làm gì để theo dõi nhịp tim mà không mang ứng dụng đến mặt sau và tiền cảnh?
Đây là mã tôi đang sử dụng (tất cả mọi thứ được lưu trữ trong appdelegate), tôi kêu gọi [self requestAccessDataTypes];
từ didFinishLaunchingWithOptions:
[healthStore enableBackgroundDeliveryForType:sampleType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {}];
HKQuery *query = [self createHeartRateStreamingQuery:datum];
if (query) {
[healthStore executeQuery:query];
}
else
{
NSLog(@"workout can not start");
}
-(HKQuery*)createHeartRateStreamingQuery:(NSDate*)workoutStartDate
{
NSLog(@"%@ - createHeartRateStreamingQuery", [self class]);
if ([HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]) {
HKQuantityType *quantityType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKAnchoredObjectQuery * heartRateQuery = [[HKAnchoredObjectQuery alloc] initWithType:quantityType predicate:nil anchor:anchor limit:HKObjectQueryNoLimit resultsHandler:^(HKAnchoredObjectQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable sampleObjects, NSArray<HKDeletedObject *> * _Nullable deletedObjects, HKQueryAnchor * _Nullable newAnchor, NSError * _Nullable error) {
if (!error) {
anchor = newAnchor;
[self updateHeartRate:sampleObjects];
}
}];
heartRateQuery.updateHandler = ^void(HKAnchoredObjectQuery *query, NSArray<__kindof HKSample *> * __nullable addedObjects, NSArray<HKDeletedObject *> * __nullable deletedObjects, HKQueryAnchor * __nullable newAnchor, NSError * __nullable error)
{
if (!error) {
anchor = newAnchor;
[self updateHeartRate:addedObjects];
}
};
return heartRateQuery;
}
return nil;
}
Cảm ơn bạn đã trả lời nhưng tôi đang sử dụng tự động chuyển dữ liệu HealthKit từ đồng hồ sang ứng dụng gốc và như tôi đã viết trong yêu cầu của tôi, dữ liệu được truyền ít nhiều trong thời gian thực! Bất cứ khi nào tôi bắt đầu ứng dụng tôi đang gọi HKQuery cho các đối tượng mới nhất và thực hiện truy vấn trên ỨNG DỤNG PHỤ HUYNH (ví dụ: iPhone) hoạt động tốt !!! Nhưng tôi không nhận được mẫu mới ngay cả khi các mẫu có ở đó, nhưng nếu tôi mang ứng dụng về phía sau và một lần nữa đến nền trước, tôi sẽ nhận được tất cả các nhịp tim mới. –
Chắc chắn nó không phải là lý tưởng để phải đóng ứng dụng của bạn để có được những dữ liệu mới nhất? Tôi đã cố gắng để ám chỉ vấn đề này, và hy vọng Apple sẽ làm cho nó có thể để có được các dữ liệu khi nó vào HealthKit trên iOS mà không có cách giải quyết như thế này. –