Вопрос по android, alarmmanager, powermanager, wakelock – AlarmManager хорошо работает в эмуляторе, но не в реальном устройстве

0

это мой код для установки будильника:

public void SetAlarm(Context context, int tag, long time){
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     Intent i = new Intent(context, Alarm.class);
     i.putExtra("position", tag);
     PendingIntent pi = PendingIntent.getBroadcast(context, tag, i, PendingIntent.FLAG_CANCEL_CURRENT);
     am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+ time, pi); // Millisec * Second * Minute
}

это мой метод onRecieve:

public void onReceive(final Context context, Intent intent){   
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "my wak up lo");
    wl.acquire();

    position = intent.getIntExtra("position", -1);         
    new PostManager(context, position);

    wl.release();
}

это работает хорошо с эмулятором. в то же время я установил будильник, который сработает через 24 часа в эмуляторе и реальном устройстве. Эмулятор работает хорошо, но не на реальном устройстве. это происходит дляPowerManager.FULL_WAKE_LOCK или что-нибудь еще? Я очень старался, но не смог найти решение.

извините приятель я такой глупый ошибка была вpostmanager(), мне очень жаль тратить ваше время. но я также использовалservice как вы предложили избежать будущей ошибки. спасибо @DavidWasser Shoshi
@DavidWasser: я использовалLog.e, через 4 часа я вижу, чтоonReceive называется. так что я думаю, что я должен использоватьservice вonReceive а не простой класс. Я постараюсь дать вам знать, что произойдет. Thankx Shoshi
Я могу'Расскажу почему он работает в эмуляторе. Очевидно, что правила там немного другие. Вы можете'т интернет-соединение вonReceive()этот метод должен немедленно вернуться. Таким образом, вам нужно перенести это в службу, и ваш широковещательный приемник запустит службу. Вы'Вам нужно будет включить пробуждение в приемнике вещания, чтобы телефон оставался в бодрствующем состоянии достаточно долго, чтобы запустить службу, прежде чем вернуться в режим сна. Возможно, вы захотите взглянуть наstackoverflow.com/questions/7182002/... David Wasser
я тоже пробовалPowerManager.PARTIAL_WAKE_LOCK вместоPowerManager.FULL_WAKE_LOCK, но это не такт работа Shoshi

Ваш Ответ

1   ответ
0

извините, ребята, проблема была вPostManager, вPostManagerя проверял сессионный cookie с другой строкой. и что случилось? вот ответчик до 4 часов cookie сеанса остаются на cookiemanager, поэтому проверка.equal(another_string) отлично работает но я думаю, что через 4 часа сессия cookie истекает и.equal(another_string) бросить исключение NullPointerException. поэтому я просто проверил, что файл cookie, который я получил, равен нулю или нет это решит мою проблему. опять извините ребята.

Похожие вопросы