WakefulIntentService не может создать экземпляр прослушивателя

Я обнаружил, что мне нужно указать слушателя в файле 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?


person Sarp Kaya    schedule 26.01.2014    source источник


Ответы (1)


Поскольку WakefulIntentService не поддерживает несколько прослушивателей, как я могу просто управлять несколькими тревогами в WakefulIntentService?

Во-первых, прочитайте раздел README о том, как задавать вопросы, чтобы получить нужные теги в своем StackOverflow. вопрос в будущем.

Затем следуйте инструкциям "Основное использование". Мой вспомогательный код для AlarmManager предназначен для довольно простых сценариев, но вам не нужно использовать этот код.

person CommonsWare    schedule 26.01.2014
comment
Спасибо за ответ, но без добавления прослушивателя в xml-файл это не работает. Я не мог найти точную часть, которая говорит о другом способе сделать это. - person Sarp Kaya; 27.01.2014
comment
В базовом использовании говорится, что «Далее» создайте класс, реализующий интерфейс WakefulIntentService.AlarmListener. Этот класс должен иметь открытый конструктор без аргументов в дополнение к реализациям метода интерфейса, поэтому я не могу использовать его для своего случая. И мой вопрос в том, что я не могу использовать в моем случае, что еще я должен использовать? - person Sarp Kaya; 27.01.2014
comment
@SarpKaya: при обычном использовании он говорит - нет, это не так. Это находится под заголовком «Использование тревог». Я указал вам словами и через гиперссылку на заголовок «Основное использование». - person CommonsWare; 27.01.2014