Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pedometer 4.0.1] stepCountStream listened in a Foreground Service does not trigger onData when phone is locked and screen is closed. Triggers when lock screen is shown again. #952

Open
amaneyn opened this issue Apr 27, 2024 · 2 comments
Labels
bugfix a bug fix

Comments

@amaneyn
Copy link

amaneyn commented Apr 27, 2024

Device / Emulator and OS

  • Device: Huawei P9 Lite
  • OS: Android 7.0

I'm developing a Flutter app using pedometer package to track steps of the user. I want to count steps when app is closed as well, so I used flutter_background_service package as well in order to use foreground service on Android.

Basically this is my setup Background Service initialization logic (which is basically configured to use onStart method mentioned below):

Future<void> initializeBackgroundService() async {
  final service = FlutterBackgroundService();

  await service.configure(
    androidConfiguration: AndroidConfiguration(
      // this will be executed when app is in foreground or background in separated isolate
      onStart: onStart,
      // auto start service
      autoStart: true,
      isForegroundMode: true,
      notificationChannelId: 'my_foreground',
      initialNotificationTitle: 'AWESOME SERVICE',
      initialNotificationContent: 'Initializing',
      foregroundServiceNotificationId: 888,
    ),
    iosConfiguration: IosConfiguration(
      // auto start service
      autoStart: true,
      // this will be executed when app is in foreground in separated isolate
      onForeground: onStart,
      // you have to enable background fetch capability on xcode project
      onBackground: onIosBackground,
    ),
  );
}

onStart method (method called when foreground service is started):

@pragma('vm:entry-point')
Future<void> onStart(ServiceInstance service) async {
  DartPluginRegistrant.ensureInitialized();

  if (service is AndroidServiceInstance) {
    service.on('setAsForeground').listen((event) {
      service.setAsForegroundService();
    });

    service.on('setAsBackground').listen((event) {
      service.setAsBackgroundService();
    });
  }

  service.on('stopService').listen((event) {
    service.stopSelf();
  });
  
  await activatePedometer(service);
}

And the content of activatePedometer method:

Future<void> activatePedometer(ServiceInstance service) async {
  Stream<StepCount> pedometerStream = Pedometer.stepCountStream;
  var subscription = pedometerStream.listen((stepCount) async {
    print("STEP DATA LISTENED!!!");
  }
   
  Timer.periodic(const Duration(seconds: 1), (timer) async {
    print('TIMER: ${DateTime.now()}!!!');
  });
}

listen callback of stepCountStream is called in the following scenarios:

  • When app is open
  • When app is minimized
  • When app is closed
  • When phone lock screen is shown

And as you can see in the code, "STEP DATA LISTENED!!!" is printed on debug console.

But when phone is locked and screen goes black, this callback is not triggered even when user takes steps. When user uses lock button to show lock screen, it is triggered again. I want to be able to read step data even when phone is sleeping (locked and screen is black).

I wanted to see if this is a foreground service issue, that's why I added the following:

Timer.periodic(const Duration(seconds: 1), (timer) async {
  print('TIMER: ${DateTime.now()}!!!');
});

"TIMER: 2024-04-27 21:58:00.657213!!!" is printed every second even when phone is locked and screen goes black. So it's clearly not a foreground service issue.

Has anyone encountered a problem similar to this? Is there anything I can do to ensure listen callback is triggered even when phone is sleeping (locked and screen is black)?

@amaneyn amaneyn added the bugfix a bug fix label Apr 27, 2024
@caneroncu
Copy link

I am trying to do something similar. Really wondering how to do this. Does anybody know how?

@maeddin
Copy link

maeddin commented Jun 28, 2024

Would #993 solve your problem?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugfix a bug fix
Projects
None yet
Development

No branches or pull requests

3 participants