#android #flutter #background-fetch
#Android #flutter #фоновая выборка
Вопрос:
Я пытаюсь реализовать функцию типа push-уведомлений, чтобы напомнить пользователю о некоторых событиях. Я хочу, чтобы мое приложение получало контент с сервера один или два раза в день.
Я пытаюсь использовать библиотеку background_fetch. Проблема в том, что при завершении работы приложения задание не вызывается, даже если я stopOnTerminate: false,
установил. Вот мой код настройки:
var config = BackgroundFetchConfig(
minimumFetchInterval: 15,
forceAlarmManager: false,
stopOnTerminate: false,
startOnBoot: true,
enableHeadless: true,
requiresBatteryNotLow: false,
requiresCharging: false,
requiresStorageNotLow: false,
requiresDeviceIdle: false,
requiredNetworkType: NetworkType.ANY,
);
BackgroundFetch.configure(config, (String taskId) async {
print("[BackgroundFetch] Event received $taskId");
print("my code is here");
BackgroundFetch.finish(taskId);
}).then((int status) {
print('[BackgroundFetch] configure success: $status');
}).catchError((e) {
print('[BackgroundFetch] configure ERROR: $e');
});
Мой класс MainActivity:
public class MainActivity extends FlutterActivity implements PluginRegistry.PluginRegistrantCallback{
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BackgroundFetchPlugin.setPluginRegistrant(this);
}
@Override
public void registerWith(PluginRegistry registry) {
GeneratedPluginRegistrant.registerWith((FlutterEngine) registry);
}
}
Я также добавил xmlns:tools="http://schemas.android.com/tools"
и tools:replace="android:label"
в манифест.
Я имитирую работу с помощью этой команды: adb shell cmd jobscheduler run -f com.mycompany.appname 999
.
Когда приложение активно или находится на переднем плане, моя функция вызывается командой снова и снова (без проблем, работает хорошо), но когда я завершаю работу своего приложения, команда выдает мне это сообщение: Could not find job 999 in package com.mycompany.appname / user 0
,
иногда оно выдает мне Running job [FORCED]
только один раз, но на самом деле моя функция не вызывается, и напри другом запуске он сообщает мне, что задания нет.
Я слышал, что это не работает в режиме отладки, поэтому я запускаю свое приложение с flutter run --release
помощью . Ну, безуспешно.
В чем может быть проблема? Заранее спасибо.
Ответ №1:
Кажется, это работает, когда вы запускаете проект из терминала с помощью flutter run. Посмотрите на этот отчет об ошибке. https://github.com/flutter/flutter/issues/101912