【问题标题】:Periodic location report of device using flutter使用颤振的设备的定期位置报告
【发布时间】:2019-09-08 12:57:23
【问题描述】:

我需要使用 Flutter 应用报告设备的当前位置。即使应用程序关闭,我也需要继续这样做。 我目前使用background_fetch 实现它,它大约每 15 分钟完成一次。 当应用程序打开或最小化时,它运行良好。但是当应用程序关闭时,它会在 Headless 模式下运行,并且不起作用。例外是:

MissingPluginException(No implementation found for method getLocation on channel lyokone/location)

似乎在 Headless 模式下,并非所有应用程序都加载到内存中。我不知道如何解决它。

我也尝试使用隔离,但遇到了一个新异常:

native function 'Window_sendPlatformMessage' (4 arguments) cannot be found.

有人知道如何解决这些问题或有任何新的想法来进行位置跟踪吗?

【问题讨论】:

    标签: android flutter background-fetch


    【解决方案1】:

    另一种选择是使用包https://github.com/Lyokone/flutterlocation https://github.com/Lyokone/flutterlocation/wiki/Background-Location-Updates
    支持即使您的应用关闭也能获取位置更新,https://github.com/Lyokone/flutterlocation/wiki/Background-Location-Updates 可能存在错误

    同样来自晶体管软件并提供 Android Headless Mod 但需要许可证
    晶体管软件包https://github.com/transistorsoft/flutter_background_geolocation/wiki/Android-Headless-Mode
    Android Headless Mod https://github.com/transistorsoft/flutter_background_geolocation/wiki/Android-Headless-Mode

    代码sn-p

    import 'package:flutter_background_geolocation/flutter_background_geolocation.dart' as bg;
    
    void headlessTask(bg.HeadlessEvent headlessEvent) async {
      print('[BackgroundGeolocation HeadlessTask]: $headlessEvent');
      // Implement a 'case' for only those events you're interested in.
      switch(headlessEvent.name) {
        case bg.Event.TERMINATE:
          bg.State state = headlessEvent.event;
          print('- State: $state');
          break;
        case bg.Event.HEARTBEAT:
          bg.HeartbeatEvent event = headlessEvent.event;
          print('- HeartbeatEvent: $event');
          break;
        case bg.Event.LOCATION:
          bg.Location location = headlessEvent.event;
          print('- Location: $location');
          break;
        case bg.Event.MOTIONCHANGE:
          bg.Location location = headlessEvent.event;
          print('- Location: $location');
          break;
        case bg.Event.GEOFENCE:
          bg.GeofenceEvent geofenceEvent = headlessEvent.event;
          print('- GeofenceEvent: $geofenceEvent');
          break;
        case bg.Event.GEOFENCESCHANGE:
          bg.GeofencesChangeEvent event = headlessEvent.event;
          print('- GeofencesChangeEvent: $event');
          break;
        case bg.Event.SCHEDULE:
          bg.State state = headlessEvent.event;
          print('- State: $state');
          break;
        case bg.Event.ACTIVITYCHANGE:
          bg.ActivityChangeEvent event = headlessEvent.event;
          print('ActivityChangeEvent: $event');
          break;
        case bg.Event.HTTP:
          bg.HttpEvent response = headlessEvent.event;
          print('HttpEvent: $response');
          break;
        case bg.Event.POWERSAVECHANGE:
          bool enabled = headlessEvent.event;
          print('ProviderChangeEvent: $enabled');
          break;
        case bg.Event.CONNECTIVITYCHANGE:
          bg.ConnectivityChangeEvent event = headlessEvent.event;
          print('ConnectivityChangeEvent: $event');
          break;
        case bg.Event.ENABLEDCHANGE:
          bool enabled = headlessEvent.event;
          print('EnabledChangeEvent: $enabled');
          break;
      }
    }
    
    void main() {
      runApp(HelloWorld());
      // Register your headlessTask:
      BackgroundGeolocation.registerHeadlessTask(headlessTask);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 2019-05-18
      • 1970-01-01
      • 2023-04-07
      • 2021-12-26
      相关资源
      最近更新 更多