报警管理器不支持其他插件? Flutter 不支持某些任务的后台执行(如果我们杀死应用程序)?

Doesn't support other plugins in Alarm manager? Flutter doesn't support background execution of some tasks(if we killed the app)?

我不知道这是问题还是错误。所以我正在写它。我编写了一个警报管理器函数来定期执行某些任务。它定期发射。但问题是我不能在其中使用某些插件。我使用共享首选项插件从本地获取一些数据。但是报警管理器函数 returns null 就可以了。我不知道为什么。它仅发生在该警报管理器静态函数内部。我刚刚使用另一个插件 Get storage 再次做了类似的事情。但结果是相似的。 就我而言,我只是想构建一个壁纸应用程序。我只想定期更换墙纸。有自然、自行车、汽车等众多类别可供选择。如果用户选择一个类别。然后我刚刚解雇了一个警报管理器,应该根据类别自动更改墙纸。由于警报管理器的静态功能,为了了解选定的类别,我只是将它们写给当地人。因此,为了在警报管理器静态函数中获取它,我使用了共享首选项和获取存储插件。但它们都不能在报警管理器中按预期工作。我不知道为什么。这是一个错误还是由于警报管理器的静态功能? 有什么解决办法或者有什么办法可以克服吗?

当用户点击按钮为特定类别设置墙纸时我的代码:

   onPressed: () async {
      print("::::::::::::");
      await AndroidAlarmManager.initialize();
      var yes = await AndroidAlarmManager.cancel(id);
      await AndroidAlarmManager.cancel(id);
     
      categoryScheduled = searchController.text.toString();
      print(yes);

      final box = GetStorage();
      var data = {
        "category": categoryScheduled ,
      };
       await box.write("bg_image", data);

      final prefs = await SharedPreferences.getInstance();
      prefs.setString('counter', categoryScheduled);

      await AndroidAlarmManager.periodic(
        timeInterval,
        20,
        term,
      );
    },

这里假设用户选择了一个类别,如“自然”,用于自动更换自然类别下的壁纸。我们只是初始化警报管理器。如果某个警报正在执行,我们也会取消。在我尝试使用 Get storage 插件在本地存储所选类别之后以及我也尝试使用共享首选项之后。但我无法在警报管理器静态函数中获取它。

我的报警管理器静态函数如下:

static term() async {
    int pageNumber = 0;
   
final prefs = await SharedPreferences.getInstance();
//here we tries to grab the locally stored keyword using shared preferbnce but it return null.but its fine workin in another function.
final counter = prefs.getString('counter') ?? 0;

//next tried to grab it using another plugin to get storage. its also return null.
    final box = GetStorage();
    var readData = await box.read("bg_image");
    print(readData);
    print("this is category");

    var query = readData["category"];
    var results;

//tries to calling API with selected category. but category returning null.
    final response = await http.get(Uri.parse(
        "https://api.unsplash.com/search/photos/?client_id=7674db521921f5e47a89c6a432205d49db929dadaae45356226372c756e&page=$pageNumber&query=$query"));
    // if (response.statusCode == 200) {
    // itemCount++;
    // Scaffold.of(context).hideCurrentSnackBar();
    // If the call to the server was successful, parse the JSON
    var jsonData = json.decode(response.body);
    print(jsonData.length);
    results = jsonData["results"];
    print(results.length);

    print(results[0]["urls"]["full"]);
    var url = results[0]["urls"]["full"];
    var progressString = Wallpaper.ImageDownloadProgress(url);
    progressString.listen((data) {}, onDone: () async {
//setting walllpaper
      await Wallpaper.homeScreen();

      // scaffoldKey.currentState.showSnackBar(snackBar);
    }, onError: (error) {
      print("Some Error");
    });
  }

使用 Flutter Local Notifications 包。

我在访问其他插件的包 Work_manager 中也遇到了同样的问题。我通过创建 Isolate on Periodic 任务来解决它。即使应用程序被终止,我也能够访问插件。 但是,当我使用内置 flutter Isolate 然后我切换到 this 包时,我遇到了问题,现在一切正常。

首先感谢 guys.Those 给出的答案对我很有帮助并且根据第一个答案得到了一些新的 knowledge.As 我们必须使用 flutter isolate.but 它会当应用程序被杀死时不工作。同样的事情发生在 flutter 本地通知插件中。为了完成这种工作,我们可以使用两个插件(我只有两个插件,可能会有更多)

1.Flutter 阿拉拉姆经理加

2.workmanager

我在使用 Alaram 管理器时遇到了一些问题 above.Anyway 我找到了一些解决方案。当前情况是回调中缺少插件支持(在 alaram 管理器插件和工作管理器插件中)function.As 根据工作管理器中的一些文档,它说我们必须注册这些插件才能在回调中做一些事情 function.But 不知道如何在 Alaram 管理器的回调中做同样的事情 function.So 工作管理器可能更多对于这种 scenario.But 更可取的是,在 flutter 的当前版本 (2.2.3) 和 workmanager plugin.so 之间存在一些问题(我不知道它可能是错误)plugin.so 我刚刚降级了 flutter 版本 2.0.3 及其工作很好 me.it 将在该回调函数中支持共享首选项插件和墙纸管理器插件。因此我可以轻松地做到这一点 task.But 仍然有一些插件在该回调中不支持 function.For 我们必须注册这些插件才能做到这一点(你可以搜索如何在 workmanager 中注册插件)。否则你应该给我们方法通道来执行这种 work.Any 方式,在我的情况下,我只是想要这两个插件来完成我的任务,感谢上帝的恩典,它在回调函数中工作正常,对我来说工作正常。