报警保持循环并制作7000多个唤醒锁,即使被取消

时间:2016-01-31 20:30:10

标签: android alarm android-alarms

我正在对闹钟进行一些测试,我已经使用SwitchPreference设置了一个基本闹钟,当选中此SwitchPreference时,闹钟会在未经检查的情况下开启并启动,它将取消警报。

我的问题是,启用后,它可以补充11K唤醒锁!我怎么知道的?使用Amplify app检测警报和放大器唤醒锁,被取消后仍然一样,当删除唤醒锁时返回1K。

我不知道为什么,但我认为它已经循环了?或者我做错了什么?

这里是警报代码:

    public void SetAlarm(Context context)
{
    AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Alarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 1000 * 60 * 2, pi);
}

public void CancelAlarm(Context context)
{
    Intent intent = new Intent(context, Alarm.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}

这就是我如何启用/禁用它:

        SwitchTest.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        @SuppressLint("CommitPrefEdits")
        @Override
        public boolean onPreferenceChange(Preference preference,
                                          Object newvalue) {
            boolean Switched = ((SwitchPreference) preference)
                    .isChecked();

            if (Switched) {
                Alarm alarm2 = new Alarm();
                alarm2.SetAlarm(getActivity());
            } else {
                Alarm alarm = new Alarm();
                alarm.CancelAlarm(getActivity());
            }
            return true;
        }
    });

那么,它有什么不对?我和样本相比......他们之间没什么奇怪的。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

你永远不会取消你所调用的警报,它永远保持工作状态 你可以做的是让setAlaram()方法返回那个挂起的意图,并在你想要的时候取消它。

 public PendingIntent SetAlarm(Context context)
{
AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), 1000 * 60 * 2, pi);

return pi;
}

以及启用/禁用它的位置更改为

 SwitchTest.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
    @SuppressLint("CommitPrefEdits")
    @Override
    public boolean onPreferenceChange(Preference preference,
                                      Object newvalue) {
        boolean Switched = ((SwitchPreference) preference)
                .isChecked();
          Alarm alarm = new Alarm();
        if (Switched) {
            alarm.SetAlarm(getActivity());
        } else {
             alarm.SetAlarm(getActivity()).cancel();
        }
        return true;
    }
});