Skip to content

stop scan when app goes to background #505

Open
@albrownwood

Description

@albrownwood

I am trying to stop the ble scanning when the app goes to background using WidgetsBindingObserver to obtain the app lifecycle events

class _Pairing0PageState extends State<Pairing0Page> with WidgetsBindingObserver{

  @override
  void initState() {
    super.initState();
    context.read<BleBloc>().startScan();
    WidgetsBinding.instance.addObserver(this);
  }


  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print('didChangeAppLifecycleState');
    if(state == AppLifecycleState.resumed){
      context.read<BleBloc>().startScan();
    }
    else{
      context.read<BleBloc>().stopScan();
    }
  }
...
}

when the app goes to background, the scan stops (and correctly resumes when app comes foreground) but I get the following error message:

E/flutter (30336): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: PlatformException(error, Attempt to invoke interface method 'void com.polidea.multiplatformbleadapter.BleAdapter.stopDeviceScan()' on a null object reference, null)
E/flutter (30336): #0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:569:7)
E/flutter (30336): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:156:18)
E/flutter (30336): <asynchronous suspension>
E/flutter (30336): #2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
E/flutter (30336): #3      ScanningMixin.stopDeviceScan (package:flutter_ble_lib/src/bridge/scanning_mixin.dart:50:26)
E/flutter (30336): #4      InternalBleManager.stopPeripheralScan (package:flutter_ble_lib/src/internal_ble_manager.dart:63:48)
E/flutter (30336): #5      BleBloc.stopScan (package:yunga/blocs/ble_bloc.dart:53:23)
E/flutter (30336): #6      _Pairing0PageState.didChangeAppLifecycleState (package:yunga/pages/pairing0_page.dart:38:31)
E/flutter (30336): #7      WidgetsBinding.handleAppLifecycleStateChanged (package:flutter/src/widgets/binding.dart:655:16)
E/flutter (30336): #8      SchedulerBinding._handleLifecycleMessage (package:flutter/src/scheduler/binding.dart:349:5)
E/flutter (30336): #9      BasicMessageChannel.setMessageHandler.<anonymous closure> (package:flutter/src/services/platform_channel.dart:74:49)
E/flutter (30336): #10     _DefaultBinaryMessenger.handlePlatformMessage (package:flutter/src/services/binding.dart:199:33)
E/flutter (30336): #11     _invoke3.<anonymous closure> (dart:ui/hooks.dart:290:15)
E/flutter (30336): #12     _rootRun (dart:async/zone.dart:1184:13)
E/flutter (30336): #13     _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter (30336): #14     _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter (30336): #15     _invoke3 (dart:ui/hooks.dart:289:10)
E/flutter (30336): #16     _dispatchPlatformMessage (dart:ui/hooks.dart:164:5)

Am I using the right approach here ?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions