我在主要活动中。有一个登录按钮bLogin
。按下该按钮后,将显示注销按钮bLogout
。两个按钮的onClick
方法如下:
bLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
llLogin.setVisibility(View.GONE);
llLogout.setVisibility(View.VISIBLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 327,
new Intent(getApplicationContext(), AlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
}
});
bLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
llLogout.setVisibility(View.GONE);
llLogin.setVisibility(View.VISIBLE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 327,
new Intent(getApplicationContext(), AlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.cancel(pendingIntent);
boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 327,
new Intent(getApplicationContext(), AlarmReceiver.class), PendingIntent.FLAG_NO_CREATE) != null);
if(!alarmUp){
Toast.makeText(getBaseContext(), "up", Toast.LENGTH_SHORT).show();
}
}
});
从上面的代码中可以看出,当按下bLogin
时,我设置闹钟,按下bLogout
后,我取消闹钟。
alarmUp
用于检查是否设置了警报。但问题是警报永远不会被取消,因为最后的Toast
永远不会显示。此外,在未设置警报时应用程序应该完成的工作永远不会在按注销时完成。
我似乎无法弄清楚可能出现的问题。设置闹钟和取消闹钟时,PendingIntent
都是相同的。
答案 0 :(得分:2)
不知道您的代码有什么问题,但如果您想取消待处理的意图,可以使用
PendingIntent.getBroadcast(getActivity(), 327, pendingIntent,
PendingIntent.FLAG_UPDATE_CURRENT).cancel();
取消待处理的意图。我认为取消你的AlarmManager会有同样的想法。虽然您可能需要更改检查警报设置方式的方式。
希望这有帮助。
答案 1 :(得分:2)
您不能取消PendingIntent
。当你打电话
manager.cancel(pendingIntent)
你正在取消闹钟。这并不取消PendingIntent
。 PendingIntent
仍然存在。所以,当你打电话
boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 327,
new Intent(getApplicationContext(), AlarmReceiver.class),
PendingIntent.FLAG_NO_CREATE) != null);
PendingIntent
仍然存在,因此PendingIntent.getBroadcast()
将返回非空值。结果。 alarmUp
始终为true
。
取消闹钟后,您需要取消PendingIntent
,如下所示:
pendingIntent.cancel();