无法取消 Android 中的当前闹钟

Posted

技术标签:

【中文标题】无法取消 Android 中的当前闹钟【英文标题】:cannot cancel the current alarm in Android 【发布时间】:2018-12-26 13:45:33 【问题描述】:

我是 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);
    

【问题讨论】:

What is a NullPointerException, and how do I fix it?的可能重复 你能帮我解决这个问题吗,我不明白我的问题与你提到的@Raj 的帖子有何相同 有趣的是,每个包含NullPointerException 的帖子都被标记为与 Raj 链接的帖子的副本。 你如何在WakeupScreen 中设置alarmActivity?将代码添加到您的原始帖子中(请编辑)。 @LAD 这正是声明这是圆锥形“什么是 NullPointerException”的副本没有帮助的情况类型。 OP 没有在空变量上调用任何方法。 Android 框架正在这样做。并且 OP 不知道框架为什么或在哪里这样做以及他如何修复它。除非他阅读 Android 源代码 2 年或请其他人帮助,否则 OP 已经绝望地迷失了。将其作为副本关闭充其量是无益的,最坏的情况是粗鲁。见meta.***.com/questions/255062/… 【参考方案1】:

问题出在WakeUpScreen:

alarmActivity.stopAlarm();

您正在调用AlarmActivity()stopAlarm() 方法,在这种情况下,AlarmActivity.thisnull。我只能假设你在WakeUpScreen 中做这样的事情:

alarmActivity = new AlarmActivity();

这是绝对不允许的!不能使用关键字实例化 Android 组件(ActivityServiceBroadcastReceiverProvidernew。只有 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);

【讨论】:

这个答案是有道理的,看起来应该可以工作。 兄弟,现在调试器越过了 stopAlarm() 方法中的所有行,但是没有调用 AlarmReceiver 类,请帮我修复它兄弟,我已经更新了我目前正在使用的代码@大卫瓦瑟 移除“setAction()”调用。你不需要它,它会导致“cancel()”调用失败 这里我使用的是基于 Action 值的服务文件,这就是我使用 ACTION 的原因,请查看我更新的服务文件。 @DavidWasser 我也尝试了 intent.putExtra() 而不是 setAction 也不起作用@DavidWasser

以上是关于无法取消 Android 中的当前闹钟的主要内容,如果未能解决你的问题,请参考以下文章

Android设置取消系统闹钟

Android,如何取消闹钟? alarmManager.cancel 不工作

重启android后无法恢复闹钟

如何在android中的指定时间播放闹钟?

Android取消所有alarmmanager

android中的原始闹钟是不是会在闹钟时广播意图?