无法取消 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.this
是null
。我只能假设你在WakeUpScreen
中做这样的事情:
alarmActivity = new AlarmActivity();
这是绝对不允许的!您不能使用关键字实例化 Android 组件(Activity
、Service
、BroadcastReceiver
、Provider
) 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);
【讨论】:
这个答案是有道理的,看起来应该可以工作。 兄弟,现在调试器越过了 stopAlarm() 方法中的所有行,但是没有调用 AlarmReceiver 类,请帮我修复它兄弟,我已经更新了我目前正在使用的代码@大卫瓦瑟 移除“setAction()”调用。你不需要它,它会导致“cancel()”调用失败 这里我使用的是基于 Action 值的服务文件,这就是我使用 ACTION 的原因,请查看我更新的服务文件。 @DavidWasser 我也尝试了 intent.putExtra() 而不是 setAction 也不起作用@DavidWasser以上是关于无法取消 Android 中的当前闹钟的主要内容,如果未能解决你的问题,请参考以下文章