Как считывать жизненно важные данные приложения Health в другие приложения в ios с помощью Healthkit
Я использую устройства iHealth для получения жизненно важных функций с устройства, использующего там приложение iHealth, эти данные хранятся в приложении Health. Я настроил свое приложение для связи с приложением Health, но не знаю, как получить сохраненные данные о состоянии здоровья в свое собственное приложение.
Поскольку нет примеров для этой проблемы, и документация также не предоставила подробную информацию о ней.
2 ответа
Если вы (или пользователь) вашего приложения предоставили доступ к своему приложению для чтения того, что iHealth хранит в базе данных HealthKit, вы можете запрашивать его с помощью API-интерфейсов HealthKit.
// 1. these are the items we want to read
let healthKitTypesToRead = NSSet(array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodGlucose)
])
// 2. these are the items we want to write
let healthKitTypesToWrite = NSSet(array:[
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass),
HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodGlucose)
])
// 3. Request HealthKit authorization
healthKitStore!.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes: healthKitTypesToRead) { (success, error) -> Void in
if( completion != nil )
{
if (success == true) {
self.initialized = true
}
completion(success:success,error:error)
}
}
Затем вы можете запросить данные:
// 4. Build the Predicate
let past = NSDate.distantPast() as NSDate
let now = NSDate()
let mostRecentPredicate = HKQuery.predicateForSamplesWithStartDate(past, endDate:now, options: .None)
// Build the sort descriptor to return the samples in descending order
let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: false)
// we want to limit the number of samples returned by the query to just 1 (the most recent)
let limit = 1
// Build samples query
let sampleQuery = HKSampleQuery(sampleType: sampleType, predicate: mostRecentPredicate, limit: limit, sortDescriptors: [sortDescriptor])
{ (sampleQuery, results, error ) -> Void in
if let queryError = error {
completion(nil,error)
return;
}
// Get the first sample
let mostRecentSample = results.first as? HKQuantitySample
// Execute the completion closure
if completion != nil {
completion(mostRecentSample,nil)
}
}
// 5. Execute the Query
self.healthKitStore!.executeQuery(sampleQuery)
}
К вашему сведению, после включения Healthkit в ваш AppID. Вы должны подтвердить подлинность требовать от магазина здоровья.
let healthKitStore:HKHealthStore = HKHealthStore()
func authorizeHealthKit(completion: ((success:Bool, error:NSError!) -> Void)!)
{
// 1. Set the types you want to read from HK Store
var healthKitTypesToRead = self.dataTypesToRead() as! Set<NSObject>
// 2. Set the types you want to write to HK Store
var healthKitTypesToWrite = self.dataTypesToWrite() as! Set<NSObject>
// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable()
{
let error = NSError(domain: "com.domain.....", code: 2, userInfo: [NSLocalizedDescriptionKey:"HealthKit is not available in this Device"])
if( completion != nil )
{
completion(success:false, error:error)
}
return;
}
else
{
// 4. Request HealthKit authorization
healthKitStore.requestAuthorizationToShareTypes(healthKitTypesToWrite, readTypes:healthKitTypesToRead, completion: { (success, error) -> Void in
if( completion != nil )
{
completion(success:success,error:error)
}
})
}
}
Полезная ссылка как ниже:
https://en.wikipedia.org/wiki/Health_%28application%29
http://www.raywenderlich.com/86336/ios-8-healthkit-swift-getting-started