BroadcastReceiver doesn' t будят телефон

У меня есть сигнальное применение. Я обычно знаю жизненный цикл приемника и как использовать WakeLock.

Сегодня, однако, со мной связался пользователь, которые послали мне действительно странную регистрацию и жаловались, что его тревога не началась, пока он не имел, открыл телефон один. Я раньше имел проблемы с телефонами, возвращающимися, чтобы спать после того, как приемник закончил его работу и прежде чем деятельность была начата, но создание WakeLock в приемнике, казалось, решило проблему. По крайней мере, до сих пор - от регистрации кажется, что onReceive метод не назвали вообще, пока у пользователя нет разблокированного телефона один.

Факты:

  • это - первое дело, которое я слушал
  • это произошло несколько раз с пользователем, но не каждый раз
  • регистрация подготовлен, добавив текст к базе данных SQLite. Это, кажется, не задерживает применение никаким значительным способом
  • информация от onReceive был зарегистрирован спустя более чем 100 секунд после ожидаемого сигнального времени начала. Это - первый вызов метода в onReceive
  • тревога была начата сразу после пользователя, открыл телефон
  • я использую AlarmManager. Флаг RTC_WAKEUP
  • пользователь <�лития> говорит, что у него нет обычая rom. Я жду ответа, если у него есть какой-либо таможенный/особенный Lockscreen <�литием> модель телефона является Sony Xperia U ST25A, Android 4.0.4

Какие-либо идеи, что могло вызывать эту проблему? Действительно ли возможно, что BroadcastReceiver "в" WakeLock не работает так или иначе?

Править:

Я хотел бы подчеркнуть проблему здесь - BroadcastReceiver должен не дать спать телефону во время своего целого onReceive метода. Однако, в моем случае, это - любой это

  • телефон падает на сон прежде onReceive конец методов (даже прежде, чем закончить "регистрировать требование")
  • , который не телефон, пробуждает приемником вообще

Кроме того, я хотел бы указать на то, что пользователь четко дал понять - тревога началась точно, когда у него есть разблокированный телефон один. Несколько раз.

Некоторый код:

@Override
public void onReceive(Context context, Intent intent) {
    Logger.initialize(context, "AlarmReceiver");
    ...
}

Методы лесоруба:

public synchronized static void initialize(Context context, String text) {
    try {
        if (mInstance == null) {//this is the block that is runned
            BugSenseHandler.initAndStartSession(context, BUGSENSE_ID);
            mInstance = new Logger(context);
            log("== Logger initialized == from "
                    + (text != null ? text : ""));//it stores times as well. Said 
                                                  //that alarm was started over 100 
                                                  //seconds after it should
        } else {
            log("logger initialized again from "
                    + (text != null ? text : ""));
        }
    } catch (Exception e) {
        try {
            BugSenseHandler.sendException(e);
            mInstance = null;
        } catch (Exception e2) {
        }
    }
}
1
добавлено отредактировано
Просмотры: 2
nl ja de
Никто не будет в состоянии дать вам любую надлежащую помощь без некоторого кода.
добавлено автор Stefan de Bruijn, источник
Дорогой, см. мой ответ на этом посту stackoverflow.com/questions/20113161/…
добавлено автор Junaid, источник
@StefandeBruijn у меня есть некоторый код также с объяснением относительно способа, которым я верю ему, не связан с проблемной причиной
добавлено автор Koger, источник

1 ответы

Смотрите на WakefulIntentService от Commonsware

0
добавлено
Хорошо, я вижу ваш пункт теперь. Сервисный класс WakefulIntent полезен, если вы порождаете работу за пределами своего бытового радиоприемника, который, кажется, не имеет место... Я также соглашаюсь с вами, что согласно документации Android, AlarmManager держит замок следа, который гарантирует, что ваш onReceive метод закончит. Это звучит мне больше как случай AlarmManger, не вызывающего по графику. Конечно, некоторые сообщения Регистрации могли помочь разъяснить это.
добавлено автор EJK, источник
это выглядит интересным, но я все еще хотел бы знать, почему телефон падает на сон прежде, чем закончить onReceive, в то время как это должно бодрствовать до своего конца, по крайней мере согласно документации
добавлено автор Koger, источник