【发布时间】:2015-06-13 18:10:15
【问题描述】:
我在主要活动中。有一个登录按钮bLogin。当按下它时,会显示一个 Logout 按钮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 永远不会显示。此外,在未设置闹钟时应用程序应完成的工作永远不会在按下 Logout 时完成。
我似乎无法弄清楚可能出了什么问题。 PendingIntents 在设置闹钟和取消闹钟时都是相同的。
【问题讨论】:
-
我希望你看看这个stackoverflow.com/questions/14485368/…会更好
-
我已经看到了。我没有看到我在那篇文章中错过了什么。你介意指出来吗?谢谢!
-
您取消警报的代码看起来没问题。请注意,检查是否设置了警报的方法是不稳定的,如果您在 PendingIntent 上调用
cancel()除了取消警报,它实际上只会返回 false。 -
@DanielNugent 那么,你知道做我想做的更好的方法吗?
-
@DanielNugent 我正在取消pendingIntent。那么取消闹钟是什么意思呢?谢谢!
标签: android android-intent alarmmanager android-pendingintent