Я обнаружил, что мне нужно указать слушателя в файле xml, например:
<WakefulIntentService listener="pathhere.MainListener" />
Проблема в том, что я не могу добавить более одного слушателя, поэтому мне приходится использовать такой обходной путь:
public MainListener(ListenerTable listenerType) {
this.listenerType = listenerType;
System.out.println("Listener Type is " + listenerType);
}
public void scheduleAlarms(AlarmManager mgr, PendingIntent pi, Context ctxt) {
System.out.println("Scheduling Alarm");
if (listenerType == ListenerTable.CELL) {
System.out.println("In scheduling cell");
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
AlarmManager.INTERVAL_FIFTEEN_MINUTES / (15 * 60) * 10, pi);
} else if (listenerType == ListenerTable.WIFI) {
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000,
AlarmManager.INTERVAL_FIFTEEN_MINUTES / (15 * 60) * 60, pi);
}
}
public void sendWakefulWork(Context ctxt) {
switch (listenerType) {
case CELL:
WakefulIntentService.sendWakefulWork(ctxt, CellService.class);
break;
case WIFI:
WakefulIntentService.sendWakefulWork(ctxt, WifiService.class);
break;
default:
//Do nothing
break;
}
}
И я передаю сигнал расписания в своей основной деятельности как:
WakefulIntentService.scheduleAlarms(new MainListener(ListenerTable.CELL),this, false);
Теперь проблема в том, что я получаю ошибку времени выполнения, которая начинается с:
01-26 21:49:12.615: E/AndroidRuntime(8064): java.lang.RuntimeException: Unable to start receiver com.commonsware.cwac.wakeful.AlarmReceiver: java.lang.RuntimeException: Could not create instance of listener
Я предполагаю, что причина в том, что он использует XML-файл выше и не передает никаких методов конструктору. Поскольку WakefulIntentService
не поддерживает несколько прослушивателей, как я могу просто управлять несколькими тревогами в WakefulIntentService
?