如何设置为重复时取消PendingIntent?

时间:2013-05-09 17:48:05

标签: android alarmmanager android-pendingintent

我有这个......

button = (Button) findViewById(R.id.start_repeating);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(Test.this, RepeatingAlarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(Test.this, 0, intent, 0);
        long firstTime = SystemClock.elapsedRealtime();
        firstTime += 1 * 1000;
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 1 * 1000, sender);
        if (mToast != null) {
            mToast.cancel();
        }
        mToast = Toast.makeText(Test.this, "repeating_scheduled", Toast.LENGTH_LONG).show();
    }
});

button = (Button) findViewById(R.id.stop_repeating);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent(Test.this, RepeatingAlarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(Test.this, 0, intent, 0);
        AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
        am.cancel(sender);
        if (mToast != null) {
            mToast.cancel();
        }
        mToast = Toast.makeText(Test.this, "repeating_unscheduled", Toast.LENGTH_LONG).show();
    }
});

但它似乎没有正常工作......每次我尝试点击第二个按钮时警报都不会取消...这是我正在使用的BroadcastReceiver ...

public class RepeatingAlarm extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        for(int i=0;i<5;i++)
            Toast.makeText(context, "repeating_received " + i, Toast.LENGTH_SHORT).show();
    }
}

请有人告诉我有什么问题!谢谢!

1 个答案:

答案 0 :(得分:2)

如果您保存对待处理意图的引用,则可以使用AlarmManager.cancel()

传递你未决的意图,你就已经完成了。