我正在对闹钟进行一些测试,我已经使用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;
}
});
那么,它有什么不对?我和样本相比......他们之间没什么奇怪的。 提前谢谢!
答案 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;
}
});