如何从后台管理器显示我的屏幕警报 AlarmBroadcastReceiver.java

如何解决如何从后台管理器显示我的屏幕警报 AlarmBroadcastReceiver.java

我安装了 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! ");
}

解决方法

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

1.修改插件

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

打开项目并在 android_alarm_manager-2.0.0 中找到 External Libraries/Flutter Plugins。并找到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 访问权限。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?