Android 警报持续循环并发出7000+;唤醒锁定,即使在被取消之后
我正在做一些警报测试,我已经设置了一个基本警报,带有SwitchPreference,当选中此SwitchPreference时,警报将打开并启动,当取消选中时,它将取消警报 我的问题是,启用时,它最多可组成11K个唤醒锁!我怎么知道的?使用检测报警和唤醒锁的放大应用程序,在被取消后仍然相同,删除后唤醒锁返回1K 我不知道为什么,但我觉得它在循环?还是我做错了什么 这是报警代码:Android 警报持续循环并发出7000+;唤醒锁定,即使在被取消之后,android,alarm,android-alarms,Android,Alarm,Android Alarms,我正在做一些警报测试,我已经设置了一个基本警报,带有SwitchPreference,当选中此SwitchPreference时,警报将打开并启动,当取消选中时,它将取消警报 我的问题是,启用时,它最多可组成11K个唤醒锁!我怎么知道的?使用检测报警和唤醒锁的放大应用程序,在被取消后仍然相同,删除后唤醒锁返回1K 我不知道为什么,但我觉得它在循环?还是我做错了什么 这是报警代码: public void SetAlarm(Context context) { AlarmManag
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;
}
});
那么,这有什么不对呢?我已经和样品做了比较。。他们之间没什么奇怪的。
提前谢谢 您从未取消您调用的警报,它将永远工作 您可以做的是使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;
}
});
您永远不会取消您调用的警报,它将永远工作 您可以做的是使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;
}
});
将对其进行测试并返回给您。报警不会再次重新启动,只会发生一次。另外:静态成员通过实例引用访问。将对其进行测试并返回给您。报警不会再次重新启动,只会发生一次。另外:静态成员通过实例引用访问。