【问题标题】:how to receive alarm service extending main activity如何接收扩展主要活动的警报服务
【发布时间】:2023-12-20 19:18:01
【问题描述】:

我在接收警报服务方面需要帮助。它并不像看起来那么容易,因为我不仅需要变量,还需要将数据传递给 onReceive 这是处于主要活动中的广播接收器。我在主要活动中创建了一个类,因此变量可以保持不变。它不仅是变量

  public class MyBroadcastReceiver  extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Calendar c = Calendar.getInstance();
        hour=c.get(Calendar.HOUR_OF_DAY);
        minute=c.get(Calendar.MINUTE);
        Calendar calendar = new GregorianCalendar(1990, 1, 1, hour, minute);
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
        String date = sdf.format(calendar.getTime());
        String str=date.charAt(0)+""+date.charAt(1)+""+date.charAt(3)+""+date.charAt(4);
        minochaDevicePolicyManager.resetPassword(str,0);
    }
}

我在主活动 onCreate 中实例化 minochaDevicePolicyManager。这里

minochaDevicePolicyManager=(DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

现在这里的任务是创建一个名为 MyBroadcastReceiver 的类,接收器将在其中工作。因为它依赖于 MainActivity。它更像是 mainactivity 的扩展 帮助

【问题讨论】:

  • 嘿@codeMagic 很明显,需要的帮助是创建一个名为 MyBroadcastReceiver 的类,接收器将在其中工作。接收方法在那里。它无法工作的原因是它处于主要活动中。而且我不知道如何在不影响其任务的情况下将其从主要活动中取出。如果您尝试将其删除,则会出现许多错误,例如 minochaDevicePolicyAdmin 未解决,即使您得到它,上下文也不存在。
  • 一种解决方案是在您的新类中创建一个构造函数并将minochaDevicePolicyManager 传递给它。

标签: java android service broadcastreceiver android-alarms


【解决方案1】:

注意onReceive() 有一个参数是Context。您可以使用它从onReceive() 中获取DevicePolicyManager

DevicePolicyManager minochaDevicePolicyManager
    = (DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE);

onReceive() 中需要的其他数据应通过Intent 发送,Activity 广播。

【讨论】:

  • 那么我的 Mybroadcast 接收器最终应该是什么?其他数据是什么?
  • @Rishabh 在onReceive() 中使用minochaDevicePolicyManager 之前添加我的答案中给出的行。您可以从MainActivity 中删除此变量。至于“其他数据”,它是BroadcastReceiverMainActivity 或任何其他外部来源获得的任何信息。当您将BroadcastReceiver 提取到外部类时,请查看任何导致编译器错误的变量。这些会给你一个线索。
  • 嘿,它不起作用。我试了一下。你能帮我写代码吗?
  • @Rishabh 请用您尝试过的详细信息编辑您的问题。
  • @Rishabh 仔细查看您的代码后,我没有看到您需要使用 Intent 发送的任何数据。您只需要注意声明变量的位置即可。
最近更新 更多