Как загрузить данные шагов и расстояний Healthkit?

Я хотел бы загрузить данные о шагах и расстоянии, собранные процессором движения в IPhone 5S (и более поздних версиях) и доступные в HealthKit от Apple, для анализа.

Какой самый простой/лучший способ сделать это?

И уточнение (после новых ответов): есть ли способ сделать это без написания нового приложения для iOS? Существуют ли какие-либо существующие приложения, предоставляющие данные, и/или какой-либо API iCloud, обеспечивающий доступ.


person payne    schedule 11.11.2014    source источник


Ответы (2)


Я не уверен, что это может помочь вам, но так я получаю шаги

+ (void)readUsersStepFromHK:(NSDate*)startDate end:(NSDate*)endDate
{
stepBegin=startDate;
stepEnd=endDate;
if ([HKHealthStore isHealthDataAvailable])
{
    HKUnit *unit = [HKUnit countUnit];

    HKQuantityType *stepCountType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];


    [self fetchMostRecentDataOfQuantityType:stepCountType withCompletion:^(HKQuantity *mostRecentQuantity, NSError *error) {
        if (!mostRecentQuantity)
        {
            //Either an error

        }
        else
        {
            double temCout=[mostRecentQuantity doubleValueForUnit:unit];
            coutStep=temCout;

        }
    }];

}
}

+ (void)fetchMostRecentDataOfQuantityType:(HKQuantityType *)quantityType withCompletion:(void (^)(HKQuantity *mostRecentQuantity, NSError *error))completion {
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO];
//=======
NSDate *startDate, *endDate; // Whatever you need in your case
startDate=stepBegin;
endDate=stepEnd;
// Your interval: sum by hour
NSDateComponents *intervalComponents = [[NSDateComponents alloc] init];
intervalComponents.hour = 1;

// Example predicate
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];

// Since we are interested in retrieving the user's latest sample, we sort the samples in descending order, and set the limit to 1. We are not filtering the data, and so the predicate is set to nil.
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:predicate limit:100 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
    if (!results) {
        if (completion) {
            completion(nil, error);
        }
        return;
    }
    if (completion) {
        // If quantity isn't in the database, return nil in the completion block.
        HKQuantitySample *quantitySample = results.firstObject;
        HKQuantity *quantity = quantitySample.quantity;

        completion(quantity, error);
    }
}];

[healthStore executeQuery:query];
}

хоп эта помощь!

person Ha cong Thuan    schedule 11.11.2014

Вы можете выполнить простой запрос шагов (и любых других образцов, хранящихся в HealthKit), используя HKSampleQuery. Если вы хотите, чтобы HealthKit объединил образцы для вас, вы можете использовать HKStatisticsQuery или HKStatisticsCollectionQuery вместо этого. Прежде чем запрашивать данные HealthKit пользователя, вам необходимо запросить разрешение на доступ к ним с помощью -[HKHealthStore requestAuthorizationToShareTypes:readTypes:completion: ].

Чтобы получить общее представление о написании приложений, интегрируемых с HealthKit, я рекомендую вам посмотреть выступление на WWDC. .

person Allan    schedule 14.11.2014