我使用CommonsWare的WakefullIntentService
并希望注册两个警报。我已阅读How to set two different WakefulIntentService AlarmListeners?,但对此有疑问:WakefullIntentService注册两个警报并可能取消一个
首先,我注意到上面的答案在WakefulIntentService.scheduleAlarms
中将force设置为true。我在我的MainActivity
中设置了两个闹钟,并且使用force = false
也可以在我的设置面板SettingsActivity
中设置闹钟。现在我看看代码,看看如果我不使用force = true
,则不会设置第二个闹钟。如果您在此处将force设置为true,您是否可能安排相同侦听器的多个实例?
第二个问题是我的第二个报警为四个间隔(设置为setInexactRepeating
),用户可以在设置屏幕上调整。有每日,每周,每月和永不选择。当用户在设置面板中更改此选项时,警报是否可以处理此“更改”?它会注册第二个监听者而不是改变当前的监听者吗?
第三,正如您在上面看到的,最后一个选项是从不让警报触发,因为我想取消警报。目前,当您致电WakefulIntentService.cancelAlarms(getActivity());
时,所有警报都将被取消(或者我错了吗?)。你如何确保第一次报警保持激活状态,而第二次报警被取消?
当前我使用的是一个BackgroundService
,它延伸到WakefulIntentService
。通过添加动作意图我执行特定的功能。我的听众都执行WakefulIntentService.AlarmListener
。
SharedPreferences pref = getSharedPreferences("digest", 0);
if(pref.getInt("mode", 1) != 3) {
WakefulIntentService.scheduleAlarms(new DigestListener(), this, false);
}
// Start the service if enabled
if (getSharedPreferences("settings", 0).getBoolean("service", true)) {
WakefulIntentService.scheduleAlarms(new DailyListener(), this, false);
}
和两个片段从我的设置面板片段:
一个从我的主要活动片断
if (isChecked) {
WakefulIntentService.scheduleAlarms(new DailyListener(), getActivity(), false);
} else {
WakefulIntentService.cancelAlarms(getActivity());
}
getActivity().getSharedPreferences("settings", 0)
.edit()
.putBoolean("service", isChecked)
.apply();
final SharedPreferences pref = getActivity().getSharedPreferences("digest", 0);
digestSpinner.setSelection(pref.getInt("mode", 1));
digestSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
pref.edit().putInt("mode", position).apply();
Log.e("SettingsFragment", position + "");
if (position != 3) {
WakefulIntentService.scheduleAlarms(new DigestListener(), getActivity(), false);
}
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {}
});