krokyze / FitKit

Flutter plugin for reading health and fitness data. Wraps HealthKit on iOS and GoogleFit on Android.
BSD 2-Clause "Simplified" License
98 stars 72 forks source link

[iOS] steps count is not correct and return the sum of steps on multiple devices regardless of using them meantime. #66

Open melsheikh92 opened 3 years ago

melsheikh92 commented 3 years ago

while using Apple watch and mobile together, the library gives me the sum of the number of steps on mobile and on apple watch as an aggregation which is not correct and makes double the value.

WhatsApp Image 2020-11-11 at 9 47 31 AM WhatsApp Image 2020-11-11 at 9 47 32 AM WhatsApp Image 2020-11-11 at 9 47 32 AM (1)

while the summary is correct on mobile but it doesn't return like it:

WhatsApp Image 2020-11-11 at 9 47 31 AM (1) but the library returns 15219 steps as a count of steps.

vintage commented 3 years ago

@melsheikh92 mind to share the code? The FitData contains the source field which you can use to properly calculate sum of steps for users with more than one device.

DinithHerath commented 3 years ago

Fortunately, I have modified the plugin to do that 😁

Use this in the pubspec.yaml as fitkit plugin.

fit_kit:
  git:
    url: git://github.com/dinithherath/FitKit.git

And in your code to get the exercise_minutes use this snippet.

if (!permissions) {
  log.d('RequestPermissions: Denied');
} else {
  try {
    final now = DateTime.now();
    FitDataStatistics resultAllSteps;
    FitDataStatistics resultAllExercise;
    try {
      resultAllSteps = await FitKit.readStatistics(
        DataType.STEP_COUNT,
        dateFrom: DateTime(now.year, now.month, now.day),
        dateTo: now,
      );
    } catch (e) {
      resultAllSteps = null;
    }
    try {
      resultAllExercise = await FitKit.readStatistics(
        DataType.EXERCISE_TIME,
        dateFrom: DateTime(now.year, now.month, now.day),
        dateTo: now,
      );
    } catch (e) {
      resultAllExercise = null;
    }
  } on UnsupportedException catch (e) {
    print(e.toString());
  }
}

This reads data from the health kit using the iOS cumulative sum method which will eliminate duplicates from your phone and apple watch.

If you get the work done please star my repo of Fitkit and follow me on GitHub ❤ Thanks.

DinithHerath commented 3 years ago

@melsheikh92 mind to share the code? The FitData contains the source field which you can use to properly calculate sum of steps for users with more than one device.