警报管理器不取消应用程序类中的待处理意图

时间:2015-02-13 17:11:06

标签: android android-intent android-pendingintent android-alarms

我有一个未取消的未决意图。我登录我的应用程序时启动该服务,当他们注销时我停止它。下面的代码位于我的应用程序类中。这是它适合去的地方吗?我试图将它放在我所拥有的MainActivity中,但在Application中具有相同的结果。

private PendingIntent mJobPendingIntent;
private final int RQSNUM_SIP = 1337;

public void startJob(){
    LogText.appendLog(TAG + " startJob");
    Intent intent = new Intent(this, JobReceiver.class);
    mJobPendingIntent = PendingIntent.getBroadcast(this, RQSNUM_SIP, intent, PendingIntent.FLAG_ONE_SHOT);
    ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP
                                                                                        , SystemClock.elapsedRealtime()+7000
                                                                                        , 7000
                                                                                        , mJobPendingIntent);
}

public void stopSipJob(){
    ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(mJobPendingIntent);
    LogText.appendLog(TAG + " stopJob");
}

我知道停止工作被调用但是在我注销并调用停止工作后,我会在手机上查看我的设置并看到该过程仍在运行。

如何停止此警报?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我认为你应该再次在stopSipJob()

上创建PendingIntent
public void stopSipJob(){
    Intent intent = new Intent(this, JobReceiver.class);
    mJobPendingIntent = PendingIntent.getBroadcast(this, RQSNUM_SIP, intent, PendingIntent.FLAG_ONE_SHOT);
    ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).cancel(mJobPendingIntent);
    LogText.appendLog(TAG + " stopJob");
}

答案 1 :(得分:0)

//label[contains(.,'Family')] 的通话中删除PendingIntent.FLAG_ONE_SHOT。这导致了你的问题。