2015-06-25 19 views
0

我使用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) {} 

}); 

回答

2

scheduleAlarms()不支持你是什么寻找。请保留您自己的AlarmManager闹钟,并使用WakefulIntentService以下the basic usage instructions,或使用Android自己的WakefulBroadcastReceiver