无法在 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.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);
}
我是 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.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);
}