Плагин android_alarm_manager не работает в фоновом режиме во Flutter: - PullRequest
0 голосов
/ 25 ноября 2018

Я провел целые выходные, экспериментируя с android_alarm_manager плагином во флаттере, и, наконец, он заработал после настройки firebase, , но не совсем .

Проблема 1 : AndroidAlarmManager.periodic вызывается приблизительно 1 minute независимо от установленной мной продолжительности ((5 secs / 15 secs / 30 Secs).

Проблема 2 : В любом случае он используется для запуска каждую минуту в foreground (даже если устройство locked), но не работает, когда в background (при нажатии home).Хотя и работал пару минут при нажатии кнопки back.

Фоновый запуск - это то, что ожидалось от этого плагина.Но я понятия не имею, почему он так странно себя ведет.Любая помощь будет оценена.Пожалуйста, дайте мне знать, если кто-то из вас сталкивался с той же проблемой, или я один.

Последовательность шагов :

  1. pubspec.yaml - android_alarm_manager, firebase_auth, google_sign_in.
  2. Добавление google-services.json и com.google.gms.google-services в оба build.gradle файла.
  3. Добавление тега service вфайл манифеста.
  4. Создание класса Application.java в src и добавление того же (.Appplication) в файл манифеста.
  5. main.dart из пример файл
  6. ссылка

main.dart -

import 'dart:async';
import 'dart:isolate';


import 'package:android_alarm_manager/android_alarm_manager.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/widgets.dart';


final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
FirebaseUser firebaseUser;


Future<void> ensureFirebaseUser() async {
  if (firebaseUser == null) {
    firebaseUser = await firebaseAuth.currentUser();
    if (firebaseUser == null) {
      firebaseUser = await firebaseAuth.signInAnonymously();
    }
  }
}


class HelloMessage {
  HelloMessage(this._now, this._msg, this._isolate, this._user, this._token);


  final DateTime _now;
  final String _msg;
  final int _isolate;
  final FirebaseUser _user;
  final String _token;


  @override
  String toString() {
    return "[$_now] $_msg "
        "isolate=$_isolate "
        "user='$_user' "
        "token=$_token";
  }
}


void printHelloMessage(String msg) {
  ensureFirebaseUser().then((_) {
    firebaseUser.getIdToken().then((String idToken) {
      print(HelloMessage(
        DateTime.now(),
        msg,
        Isolate.current.hashCode,
        firebaseUser,
        idToken,
      ));
    });
  });
}


void printHello() {
  printHelloMessage("Hello, world!");
}


void printGoodbye() {
  printHelloMessage("Goodbye, world!");
}


bool oneShotFired = false;


void printOneShot() {
  printHelloMessage("Hello, once!");
}


Future<void> main() async {
  final int helloAlarmID = 0;
  final int goodbyeAlarmID = 1;
  final int oneShotID = 2;


  // Start the AlarmManager service.
  await AndroidAlarmManager.initialize();


  printHelloMessage("Hello, main()!");
  runApp(const Center(
      child: Text('Hello, world!', textDirection: TextDirection.ltr)));
  await AndroidAlarmManager.periodic(
      const Duration(seconds: 5), helloAlarmID, printHello,
      wakeup: true);
  await AndroidAlarmManager.oneShot(
      const Duration(seconds: 5), goodbyeAlarmID, printGoodbye);
  if (!oneShotFired) {
    await AndroidAlarmManager.oneShot(
        const Duration(seconds: 5), oneShotID, printOneShot);
  }
}

Консоль O / P -

I/flutter ( 4893): [2018-11-26 01:27:56.093322] Hello, world! isolate=289040868 user='FirebaseUser({uid: .......
I/flutter ( 4893): [2018-11-26 01:27:56.120643] Goodbye, world! isolate=289040868 user='FirebaseUser({uid: .....
I/flutter ( 4893): [2018-11-26 01:27:56.123499] Hello, once! isolate=289040868 user='FirebaseUser({uid: ......
I/flutter ( 4893): [2018-11-26 01:28:57.860115] Hello, world! isolate=289040868 user='FirebaseUser({uid: ......
I/flutter ( 4893): [2018-11-26 01:30:00.037481] Hello, world! isolate=289040868 user='FirebaseUser({uid: .....
I/flutter ( 4893): [2018-11-26 01:31:08.422318] Hello, world! isolate=289040868 user='FirebaseUser({uid: .....
I/flutter ( 4893): [2018-11-26 01:32:08.545903] Hello, world! isolate=289040868 user='FirebaseUser({uid: .....

Хотя я до сих пор не понимаю, почему firebase используется с этим плагином, похоже, что я все сделал правильно, кстати.Спасибо.

...