Android警报未取消 [英] Android alarm not cancelling

查看:99
本文介绍了Android警报未取消的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在参加主要活动。有一个登录按钮 b登录。按下该按钮后,将显示注销按钮 bLogout 。这两个按钮的 onClick 方法如下:

I am in the main activity. There is a Login button bLogin. When it is pressed, a Logout button is displayed bLogout. The onClick methods for the two buttons are as follows:

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 被按下时,我取消了警报。

As can be seen in the code above, when bLogin is pressed, I set the alarm, and when bLogout is pressed, I cancel the alarm.

alarmUp 用于检查是否设置了警报。但是问题在于,该警报永远不会取消,因为末尾的 Toast 不会显示。另外,在未设置警报时应用程序应完成的工作永远不会按注销来完成。

alarmUp is used to check if the alarm is set. But the problem is that the alarm is never cancelled because the Toast at the end is never displayed. Also, the work that should be done by the app when the alarm is not set is never done on pressing Logout.

我不能似乎弄清楚什么可能是错的。 PendingIntent 在设置闹钟和取消闹钟时都是相同的。

I can't seem to figure out what might be wrong. The PendingIntents are the same for both when the alarm is set, and when it is cancelled.

推荐答案

您不会取消 PendingIntent 。致电时

manager.cancel(pendingIntent) 

您正在取消警报。这不会取消 PendingIntent PendingIntent 仍然存在。因此,当您随后致电

you are cancelling the alarm. This doesn't cancel the PendingIntent. The PendingIntent still exists. So when you then call

boolean alarmUp = (PendingIntent.getBroadcast(getApplicationContext(), 327,
        new Intent(getApplicationContext(), AlarmReceiver.class),
        PendingIntent.FLAG_NO_CREATE) != null);

PendingIntent 仍然存在,因此 PendingIntent.getBroadcast()将返回非null。结果。 alarmUp 始终为 true

the PendingIntent still exists, so PendingIntent.getBroadcast() will return a non-null. result. alarmUp will always be true.

您需要取消闹钟后,取消 PendingIntent ,例如:

You need to cancel the PendingIntent after you cancel the alarm, like this:

pendingIntent.cancel();

这篇关于Android警报未取消的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆