Skip to content
Shiny Controls v1.0 - The Ultra Control Suite for .NET MAUI & BlazorO...M...G!

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));
}
}

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));

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/dL
await health.Write(new NumericHealthResult(DataType.BodyTemperature, now, now, 36.8)); // °C
await health.Write(new NumericHealthResult(DataType.ActiveEnergyBurned, now.AddMinutes(-30), now, 250)); // kcal
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));
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"
));

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
));