无法在 Android 中取消当前闹钟

cannot cancel the current alarm in Android

我是 Android 的新手。在这里,我没有收到任何错误,在调试 stopAlarm() 方法时,调试器跨越了所有线路,但没有调用 AlarmReceiver。

谁能帮我解决一下。

更新:

AlarmActivity.java

public void stopAlarm(Context context) {
        Intent intent = new Intent(context,AlarmReceiver.class);
        intent.setAction("ALARM_OFF");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mAlarmId, intent,0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
    }

问题出在这里,在WakeUpScreen:

alarmActivity.stopAlarm();

您正在调用 AlarmActivity()stopAlarm() 方法,在本例中,AlarmActivity.thisnull。我只能假设你在 WakeUpScreen:

中做这样的事情
alarmActivity = new AlarmActivity();

这是绝对的禁忌!不能实例化Android组件(ActivityServiceBroadcastReceiverProvider) 使用关键字 new。只有 Android 可以创建和初始化这些组件,因为这些组件需要先由框架设置 Context 才能使用。

如果你想调用另一个Activity中的方法,那么你需要确保那个方法是static。如果您将 stopAlarm() 方法声明为 static,您会发现它会抱怨一些事情(例如 AlarmActivity.this),这就是为什么您需要重写该方法以采用 Context 参数,像这样:

public void stopAlarm(Context context) {
    Intent intent = new Intent(context, AlarmReceiver.class);
    PendingIntent alarmIntent = PendingIntent.getBroadcast(context, mAlarmId, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(this.ALARM_SERVICE);
    alarmManager.cancel(alarmIntent);
}