Service, BroadcastReceiver и их SharedPreferences
-
MAGISTR-Shuba
- Сообщения: 15
- Зарегистрирован: 04 июн 2013, 18:39
Service, BroadcastReceiver и их SharedPreferences
Всем доброго времени суток =) Постарался изложить как можно яснее свою проблему )
Описание:
Пользователь заходит в приложение, указывает какое-то время. Ему через это время выкидывается какое-либо сообщение (не суть).
Задача:
Сделать так, чтобы сообщение вывелось именно через время, указанное пользователем. Вдобавок, если пользователь выключает устройство и включает его - ПРОДОЛЖАЕТСЯ отсчет времени или же высвечивается сообщение о финише таймера. Более того, сделать процесс неубиваемым (кроме удаления самого приложения, конечно) =)
Как пытаюсь делать я:
Почитав о таймерах, алармах и прочих инструментах, я решил использовать следующую схему:
Когда пользователь настроил нужное кол-во времени - в SharedPreferences (sPref) записывается текущее время и время, когда нужно "появиться" сообщению. Этот sPref я передаю фоновому сервису (запускающемуся по аларму каждые n миллисекунд, дабы презреть свое состояние убиваемости) и бродкасту (тому, что срабатывает после ребута). После ребута бродкаст снова запускает сервис с временем, которое у него отложилось.
Проблема:
В бродкасте интент от SharedPreferences - null, и я не знаю что с этим поделать..К тому же хочу избежать записи времени на карту памяти или как-то вне рамках приложения..
Народ, помогите кто в теме - уже кучу времени убил на такую "простенькую" задачу
Описание:
Пользователь заходит в приложение, указывает какое-то время. Ему через это время выкидывается какое-либо сообщение (не суть).
Задача:
Сделать так, чтобы сообщение вывелось именно через время, указанное пользователем. Вдобавок, если пользователь выключает устройство и включает его - ПРОДОЛЖАЕТСЯ отсчет времени или же высвечивается сообщение о финише таймера. Более того, сделать процесс неубиваемым (кроме удаления самого приложения, конечно) =)
Как пытаюсь делать я:
Почитав о таймерах, алармах и прочих инструментах, я решил использовать следующую схему:
Когда пользователь настроил нужное кол-во времени - в SharedPreferences (sPref) записывается текущее время и время, когда нужно "появиться" сообщению. Этот sPref я передаю фоновому сервису (запускающемуся по аларму каждые n миллисекунд, дабы презреть свое состояние убиваемости) и бродкасту (тому, что срабатывает после ребута). После ребута бродкаст снова запускает сервис с временем, которое у него отложилось.
Проблема:
В бродкасте интент от SharedPreferences - null, и я не знаю что с этим поделать..К тому же хочу избежать записи времени на карту памяти или как-то вне рамках приложения..
Народ, помогите кто в теме - уже кучу времени убил на такую "простенькую" задачу
Re: Service, BroadcastReceiver и их SharedPreferences
покажи, пожалуйста, код когда ты записываешь в него и когда берешь из него.
-
MAGISTR-Shuba
- Сообщения: 15
- Зарегистрирован: 04 июн 2013, 18:39
Re: Service, BroadcastReceiver и их SharedPreferences
Вытащил основной код из бродкаста:adarash писал(а):покажи, пожалуйста, код когда ты записываешь в него и когда берешь из него.
Код: Выделить всё
public void onReceive(Context context, Intent intent) {
this.context=context;
sPref = context.getSharedPreferences("myPrefs", Context.MODE_PRIVATE);
ed = sPref.edit();
if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())
{
timeBefore=sPref.getLong("timeBefore", 0);
}
Код: Выделить всё
ed.putLong("timeBefore", timeBefore);Re: Service, BroadcastReceiver и их SharedPreferences
ed.comit(); при записи выполнял?
типа
типа
Код: Выделить всё
ed.putLong("timeBefore", timeBefore);
ed.comit();-
MAGISTR-Shuba
- Сообщения: 15
- Зарегистрирован: 04 июн 2013, 18:39
Re: Service, BroadcastReceiver и их SharedPreferences
Ну да) я говорю - с этим во всех остальных классах проблем не возникло, только с ребут-ресиверомadarash писал(а):ed.comit(); при записи выполнял?
типаКод: Выделить всё
ed.putLong("timeBefore", timeBefore); ed.comit();
Re: Service, BroadcastReceiver и их SharedPreferences
Причины может быть 3: Первая - переменная не записывается.Также если SharedPreferences - null, то это может означать, что ты не тот SharedPreferences запрашиваешь, либо у тебя к нему доступа нет. Проект на Github-e у тебя?
-
MAGISTR-Shuba
- Сообщения: 15
- Зарегистрирован: 04 июн 2013, 18:39
Re: Service, BroadcastReceiver и их SharedPreferences
Нет, на гите нет..adarash писал(а):Причины может быть 3: Первая - переменная не записывается.Также если SharedPreferences - null, то это может означать, что ты не тот SharedPreferences запрашиваешь, либо у тебя к нему доступа нет. Проект на Github-e у тебя?
Код: Выделить всё
private void save()
{
ed.putLong("timeBefore", timeBefore);
ed.commit();
Intent intent = new Intent(Service.this, BroadCastReboot.class);
intent.putExtra("timeBefore", timeBefore);
sendBroadcast(intent);
}
Кстати, при регистрации - бродкаст нормально вытаскивает данные, , а вот при перезагрузке устройства, когда он должен запускаться и снова вытаскивать из интента sPref- выкидывает null..
Не приведете простенький пример как передавать SharedPreferences загрузочному бродкасту, чтобы он его мог отобразить хотя бы в тосте? %)