【问题标题】:how to show my screen alarm from background manager如何从后台管理器显示我的屏幕警报
【发布时间】:2021-08-06 05:55:43
【问题描述】:

我安装了 android 警报管理器包并在后台打印代码,它运行良好。 但是如何显示我的警报屏幕,例如 WhatsApp 接听电话, 我可以用颤振做到这一点吗?

void runOnBackGround() async {
  final int helloAlarmID = 0;
  await AndroidAlarmManager.initialize();
  await AndroidAlarmManager.periodic(
      const Duration(seconds: 1), helloAlarmID, callBack,
      wakeup: true);
}

void callBack(i) async {
  final DateTime now = DateTime.now();
  print("[$now] id = $i Hello, world! ");
}

【问题讨论】:

    标签: flutter dart alarmmanager android-alarms background-service


    【解决方案1】:

    就我而言,我修改了插件代码并需要一些权限。我从geisterfurz007/random-alarm 找到了这个解决方案。它使得可以从后台显示应用程序。

    1。修改插件

    编辑:要在闹钟响起时打开应用程序,需要修改插件。

    打开项目,在External Libraries/Flutter Plugins中找到android_alarm_manager-2.0.0。并找到AlarmBroadcastReceiver.java,复制粘贴以下代码。该代码来自the flutter issue

    AlarmBroadcastReceiver.java

    // Copyright 2019 The Chromium Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
         
    package io.flutter.plugins.androidalarmmanager;
         
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.os.PowerManager;
    import android.content.pm.PackageManager;
    import android.view.WindowManager;
         
    public class AlarmBroadcastReceiver extends BroadcastReceiver {
      private static PowerManager.WakeLock wakeLock;
         
      @Override
      public void onReceive(Context context, Intent intent) {
        PowerManager powerManager = (PowerManager)
                context.getSystemService(Context.POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
                PowerManager.ACQUIRE_CAUSES_WAKEUP |
                PowerManager.ON_AFTER_RELEASE, "My wakelock");
         
        Intent startIntent = context
                .getPackageManager()
                .getLaunchIntentForPackage(context.getPackageName());
         
        startIntent.setFlags(
                Intent.FLAG_ACTIVITY_REORDER_TO_FRONT |
                        Intent.FLAG_ACTIVITY_NEW_TASK |
                        Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
        );
         
        wakeLock.acquire();
        context.startActivity(startIntent);
        AlarmService.enqueueAlarmProcessing(context, intent);
        wakeLock.release();
      }
    }
    

    2。权限

    当闹钟从后台响起时,需要获得运行应用程序的权限。

    • 显示在其他应用之上
    • 忽略电池优化

    您可以使用permission_handler访问权限。

    【讨论】:

    • 这很好。谢谢你的努力,我会试试的
    • 拜托,你能在你设置的项目中向我解释一下,我可以从哪里打开应用程序的确切点,除了案例和数据
    • @ahmed Magdy 应用程序将通过修改后的AlarmBroadcastReceiver.java 打开。当预定时间到来时,该接收器将运行并打开应用程序。请参阅Intent
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多