Document DB v7.2: Temporal Support, Telemetry Collection, All Calculations, String Based APIs, & Orleans Storage Providers! Feed The Machine Here
Writing Data
You can write health data to Apple HealthKit and Android Health Connect using the Write method. Request write permissions first using PermissionType.Write.
public class HealthWriteViewModel(IHealthService health){ async Task WriteDataAsync() { // 1. Request write permissions (uniform for all types) await health.RequestPermissions( PermissionType.Write, DataType.Weight, DataType.StepCount, DataType.Hydration );
// Or mix read/write per metric in a single call // await health.RequestPermissions( // (PermissionType.Write, DataType.Weight), // (PermissionType.Write, DataType.StepCount), // (PermissionType.ReadWrite, DataType.Hydration) // );
var now = DateTimeOffset.Now;
// 2. Write a weight measurement await health.Write(new NumericHealthResult(DataType.Weight, now, now, 75.0));
// 3. Write step counts over a time range await health.Write(new NumericHealthResult( DataType.StepCount, now.AddMinutes(-30), now, 500 ));
// 4. Write blood pressure await health.Write(new BloodPressureResult(now, now, 120.0, 80.0)); }}Writing Menstruation Flow
Section titled “Writing Menstruation Flow”Menstruation flow uses the categorical MenstruationFlowResult. Request the MenstruationFlow permission, then write a record per day. The optional IsCycleStart flag marks the first day of the period.
await health.RequestPermissions(PermissionType.Write, DataType.MenstruationFlow);
var today = DateTimeOffset.Now;
await health.Write(new MenstruationFlowResult(today, today, MenstrualFlow.Medium, IsCycleStart: true));await health.Write(new MenstruationFlowResult(today.AddDays(1), today.AddDays(1), MenstrualFlow.Light));Writing Additional Numeric Metrics
Section titled “Writing Additional Numeric Metrics”All numeric metrics are written with NumericHealthResult — just pass the matching DataType and value in its documented unit:
await health.RequestPermissions( PermissionType.Write, DataType.BloodGlucose, DataType.BodyTemperature, DataType.ActiveEnergyBurned);
var now = DateTimeOffset.Now;
await health.Write(new NumericHealthResult(DataType.BloodGlucose, now, now, 95)); // mg/dLawait health.Write(new NumericHealthResult(DataType.BodyTemperature, now, now, 36.8)); // °Cawait health.Write(new NumericHealthResult(DataType.ActiveEnergyBurned, now.AddMinutes(-30), now, 250)); // kcalWriting Reproductive & Cycle Data
Section titled “Writing Reproductive & Cycle Data”await health.RequestPermissions( PermissionType.Write, DataType.SexualActivity, DataType.OvulationTest, DataType.CervicalMucus, DataType.IntermenstrualBleeding);
var now = DateTimeOffset.Now;
await health.Write(new SexualActivityResult(now, now, SexualActivityProtection.Protected));await health.Write(new OvulationTestResult(now, now, OvulationTestOutcome.Positive));await health.Write(new CervicalMucusResult(now, now, CervicalMucusAppearance.EggWhite));await health.Write(new IntermenstrualBleedingResult(now, now));Writing Workouts
Section titled “Writing Workouts”await health.RequestPermissions(PermissionType.Write, DataType.Workout);
var end = DateTimeOffset.Now;var start = end.AddMinutes(-45);
await health.Write(new WorkoutResult( start, end, WorkoutType.Running, TotalEnergyKilocalories: 420, TotalDistanceMeters: 7500, Title: "Morning run"));Writing Nutrition
Section titled “Writing Nutrition”Only the nutrient values you set are written; everything else is omitted. Masses are in grams, energy in kilocalories.
await health.RequestPermissions(PermissionType.Write, DataType.Nutrition);
var now = DateTimeOffset.Now;
await health.Write(new NutritionResult( now, now, Meal: MealType.Lunch, Name: "Chicken & rice", EnergyKilocalories: 550, ProteinGrams: 40, CarbohydratesGrams: 60, TotalFatGrams: 12));