如何讀取我們在健康應用程序中輸入到我們的定製應用程序的身高和體重數據值?如何將我們在健康應用程序中輸入的身高和體重數據讀取到我們的定製應用程序
1
A
回答
0
您可以對要在後臺讀取的數據類型啓用後臺通知。 例如下面是使重量數據能夠後臺傳送的方法。您可以在didFinishLaunchingWithOptions方法中調用此方法。
- (無效){enableBackgroundDeliveryForQuantityType
HKQuantityType *weightType = [HKQuantityType quantityTypeForIdentifier: HKQuantityTypeIdentifierBodyMass];
[self.healthStore enableBackgroundDeliveryForType: weightType frequency: HKUpdateFrequencyImmediate withCompletion: ^(BOOL success, NSError *error) {
NSLog(@"***** Background notification called ................. %d", success);
}];
HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType: weightType predicate: nil updateHandler: ^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
if(error) {
NSLog(@"Error.... %@", error.localizedDescription);
abort();
}
NSLog(@"Weight data updated");
[self yourCustomisedMethod: completionHandler];
}];
[self.healthStore executeQuery: query];
}
在成功的通知,您可以編寫自己的自定義方法,並調用它。
1
1.請求HealthKit授權:
- (void)checkHealthStoreAuthorization
{
if ([HKHealthStore isHealthDataAvailable]) {
NSSet *readDataTypes = [self dataTypesToRead];
if (!self.healthStore) {
self.healthStore = [[HKHealthStore alloc] init];
}
static NSInteger i = 0;
for (HKObjectType * quantityType in readDataTypes) {
if ([self.healthStore authorizationStatusForType:quantityType] == HKAuthorizationStatusNotDetermined) {
[self.healthStore requestAuthorizationToShareTypes:nil readTypes:readDataTypes completion:^(BOOL success, NSError *error) {
i++;
if (!success) {
if (error) {
NSLog(@"requestAuthorizationToShareTypes error: %@", error);
}
return;
} else {
if (i == [readDataTypes count]) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[self getHeight];
[self getWeight];
});
}
}
}];
} else {
if ([quantityType isEqual:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight]]) {
[self getHeight];
} else if ([quantityType isEqual:[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]]) {
[self getWeight];
}
}
}
}
}
- (NSSet *)dataTypesToRead
{
HKQuantityType *height = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
HKQuantityType *weight = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
return [NSSet setWithObjects:height, weight, nil];
}
2.獲取身高和體重:
- (void)getHeight
{
NSDateComponents *interval = [[NSDateComponents alloc] init];
interval.month = 1;
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
HKStatisticsCollectionQuery *query =
[[HKStatisticsCollectionQuery alloc] initWithQuantityType:quantityType
quantitySamplePredicate:nil
options:HKStatisticsOptionDiscreteAverage
anchorDate:[NSDate date]
intervalComponents:interval];
query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {
if (error) {
NSLog(@"An error occurred while retrieving body mass: %@", error);
}
[results enumerateStatisticsFromDate:[self startDate]
toDate:[NSDate date]
withBlock:^(HKStatistics *result, BOOL *stop) {
HKQuantity *quantity = result.averageQuantity;
const int month = 30 * 24 * 60 * 60;
static BOOL isLastMonthResult;
static double lastHeight;
if ([[NSDate date] timeIntervalSinceDate:result.startDate] < month) {
isLastMonthResult = YES;
if (!quantity && lastHeight > 0.0) {
NSLog(@"Height: %lf", lastHeight);
}
}
if (quantity) {
lastHeight = [quantity doubleValueForUnit:[HKUnit meterUnit]] * 100;
if (isLastMonthResult) {
NSLog(@"Height: %lf", lastHeight);
}
}
}];
};
[self.healthStore executeQuery:query];
}
- (void)getWeight
{
NSDateComponents *interval = [[NSDateComponents alloc] init];
interval.month = 1;
HKQuantityType *quantityType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];
HKStatisticsCollectionQuery *query =
[[HKStatisticsCollectionQuery alloc] initWithQuantityType:quantityType
quantitySamplePredicate:nil
options:HKStatisticsOptionDiscreteAverage
anchorDate:[NSDate date]
intervalComponents:interval];
query.initialResultsHandler = ^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *results, NSError *error) {
if (error) {
NSLog(@"An error occurred while retrieving body mass: %@", error);
}
[results enumerateStatisticsFromDate:[self startDate]
toDate:[NSDate date]
withBlock:^(HKStatistics *result, BOOL *stop) {
HKQuantity *quantity = result.averageQuantity;
const int month = 30 * 24 * 60 * 60;
static BOOL isLastMonthResult;
static double lastWeight;
if ([[NSDate date] timeIntervalSinceDate:result.startDate] < month) {
isLastMonthResult = YES;
if (!quantity && lastWeight > 0.0) {
NSLog(@"Weight: %lf", lastWeight);
}
}
if (quantity) {
lastWeight = [quantity doubleValueForUnit:[HKUnit gramUnit]]/1000;
if (isLastMonthResult) {
NSLog(@"Weight: %lf", lastWeight);
}
}
}];
};
[self.healthStore executeQuery:query];
}
- (NSDate *)startDate
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
components.hour = 0;
components.year -= 1;
NSDate *startDate = [calendar dateFromComponents:components];
return startDate;
}
相關問題
- 1. 如何在我們的應用程序中閱讀anather應用程序的pdf?
- 2. 我們如何在Silverlight 4應用程序中讀取GPS?
- 3. 我們如何將ALAudioRecorder API應用到choregraphe應用程序中
- 4. 我們如何將sdcard中的3gp文件存入我們的應用程序?
- 5. 我們是否可以製作Facebook應用程序,讓我們的用戶在我們的應用程序內製作新的Facebook應用程序?
- 6. 我們如何使用iOS中的應用程序讀取傳入短信
- 7. 如何重新上傳我們的應用程序到appstore
- 8. 如何整合Google將API放入我們的應用程序?
- 9. 如何將任何域名重定向到我們的web應用程序
- 10. 在Windows8 Metro應用程序中啓用CharmBar到我們的應用程序?
- 11. 應用程序被拒絕,健康應用程序權限
- 12. 我們如何爲我們的.net應用程序創建有吸引力的/定製的安裝程序?
- 13. 如何將我們的應用程序添加到iAD網絡
- 14. 如何做健康檢查的nginx的和Rails應用程序
- 15. 我們如何將wikihow集成到移動應用程序中?
- 16. 如何打開我們的應用程序中的其他應用程序iphone
- 17. 我們如何將指紋讀取器部署到C#Web應用程序?
- 18. 在我的iPhone應用程序中讀取「設置」應用程序數據
- 19. 我們如何在ASP.NET中更改我們的Web應用程序的語言?
- 20. 應用程序健康檢查
- 21. Spring Web應用程序健康檢查
- 22. 健康監測應用程序
- 23. 如何確保我的應用程序連接到RabbitMQ是健康的
- 24. Android內存管理 - 我的應用程序是否健康?
- 25. 我們可以在html中爲android應用程序製作應用程序嗎?
- 26. 我們如何將角2應用程序與Angular JS應用程序集成?
- 27. 如何在我們的應用程序中使用UTImportedTypeDeclarations
- 28. 我們是否在Windows應用程序
- 29. 我們如何製作守護進程應用程序?
- 30. 如何在接受我們的應用程序發送的應用程序請求後重定向到我的應用程序頁面?
歡迎#1。分享您嘗試過的代碼片段。 – Daenarys 2015-04-01 11:33:45