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

