2016-11-14 2 views
0

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

public void startMyReceiver() { 
    Long time = new GregorianCalendar().getTimeInMillis() + 1000 * 60 * 60 * 24 * 30; <-- for 1 month (it's getting numeric overflow, but is working) 
    Long interval = 2592000000L; 

    Intent intentAlarm = new Intent(this, MyReceiver.class); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval, PendingIntent.getBroadcast(this, 2, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT)); 
} 

Тогда простой класс приемник >>

public class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent){ 
     sendNotification(); 
    { 
} 

Тогда в AndroidManifest.xml >>

<application> 
<receiver android:name="mypackage.MyReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 
</application> 

Я установил, что «android.intent.action.BOOT_COMPLETED» думает, что он собирается восстановить счетчик и продолжать отсчет до истечения времени ...

Но он сразу же начинает приемник, когда устройство BOOTED UP ...

Как я могу установить приемник на 1 месяц и после REBOOT он продолжает подсчитывать ??

- EDIT - НОВЫЙ ВОПРОС -

Как бы самый простой способ сохранить время и сделать расчет? Что-то вроде этого?? >>

1 - При первом срабатывании будильника я сохраняю текущее время в миллисекундах в Long FirstTime и определяю будильник на firstTime + longOneMonth;

2 - В приемник для загрузки, я получаю текущее время снова и сохранить его в Лонг rebootTime, то я:

Long timeDifference = rebootTime - firstTime; 
Long differenceToMonth = longOneMonth - timeDifference; 

И установите приемник снова время rebootTime + differenceToMonth ??

- EDIT 2 -

Может быть, если преобразовать первый параметр millisseconds на строки даты приемника и применить() его общие предпочтения, при перезагрузке, я мог бы преобразовать, что millisseconds снова .. . Я думаю, это сработает и будет проще

+0

сохранять и извлекать его из sharedPreferences, файл или базу данных. Первое, наверное, самое легкое. – MikeT

+0

, пожалуйста, добавили новый вопрос в главном –

ответ

1
  1. Определите другой трансляционный приемник для загрузки.
  2. Храните время (месяц спустя) где-то
  3. Все ваши тревоги исчезнут, когда устройство загрузится. Поэтому, когда устройство загрузится, вызовите еще одну функцию, которая снова установит будильник. Но обратите внимание, что вы должны подумать о том, что прошло некоторое время с тех пор, как в последний раз вы установили будильник (например, 7 дней назад вы установили будильник), поэтому вы всегда должны рассчитывать разницу между установленным временем и временем;

EDIT: Самый простой способ расчета времени является то, что, когда вы устанавливаете сигнализацию, вы сохраняете правильный now время как миллисекунды. В следующий раз вы снова получите время и минус с предыдущим сохраненным вами временем. это разница во времени!

В конце минус время один месяц с величиной разности

Long time = 
new GregorianCalendar().getTimeInMillis() + 
(1000 * 60 * 60 * 24 * 30) - 
TIME_DIFFERENCE 
+0

Отредактировал мой вопрос, включая новый –

+0

Получил его ... Это определенно сработает ... Спасибо! –

Смежные вопросы