2015-11-07 2 views
1

данные, кажется, теряются после перезагрузки устройства или даже закрытия моего приложения, я передаю данные BroadCastReceiver с намерением.BroadcastReceiver теряет данные после перезагрузки

Как установить мои тревоги, пользователь получает запрос с DatePicker диалогового

public void setAlarm(View view) { 

    Calendar cal = Calendar.getInstance(); 
    cal.set(Calendar.YEAR, yearDate); 
    cal.set(Calendar.MONTH, monthDate); 
    cal.set(Calendar.DAY_OF_MONTH, dayDate); 
    long alertTime = cal.getTimeInMillis(); 

    Intent alertIntent = new Intent(this, AlertReceiver.class); 

    alertIntent.putExtra("name", name); 
    alertIntent.putExtra("id", mainId); 
    alertIntent.putExtra("releaseDate", releaseDate); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, alertTime, 
      PendingIntent.getBroadcast(this, mainId, alertIntent, 
        PendingIntent.FLAG_UPDATE_CURRENT)); 

} 

BroadcastReceiver OnReceive()

public class AlertReceiver extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    String name = intent.getStringExtra("name"); 
    String releaseDate = intent.getStringExtra("releaseDate"); 
    int id = intent.getIntExtra("id", 0); 

    createNotification(context, name + "releases on" + releaseDate, "Reminder", id); 

    } 
} 

После того как я перезагрузить устройство или даже закрыть мое приложение, то Broadcast теряет его данные? Вместо получения; 10.02.2012, я получаю null null on null. Замысел удаляется? (Не знаю правильного термина). Вместо того, чтобы показывать сообщение, подобное «ЭТОТ фильм отсутствует», вместо него отображается «null is out», и оно отображает только одно уведомление, не более одного, поэтому BroadcastReceiver только напоминает мне о последнем фильме, в котором я последний раз задавал напоминание, благодаря!

Мой Android манифеста:

<receiver android:name=".AlertReceiver" 
       android:enabled="true"> 
     <intent-filter android:priority="100"> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     </intent-filter> 
    </receiver> 

ответ

2

Да, ваши приложения в памяти состояние теряется, когда ваш процесс умирает (что он может сделать в значительной степени любое время ваше приложение не на переднем плане). Это не уникально для Android.

Если вы хотите хранить свои данные, вы должны каким-то образом сохранить их на диск. Вы должны прочитать официальное руководство по хранению в Android: http://developer.android.com/guide/topics/data/data-storage.html

+0

Спасибо, чувак! Поэтому я сохраняю имя, id и дату выпуска в «SharedPreference», а затем в onReceive() я получаю данные, достаточно просто. Но есть проблема, как я знаю, чтобы получить данные из ЭТОГО специфического «SharedPreference» в методе onReceive(), может быть, я попытаюсь сделать это с идентификатором, так или иначе? Каждый фильм имеет уникальный идентификатор – MadBoy

+0

SharedPreferences больше подходит для значений параметров «settings» - где у вас будет набор известных ключей и по одному значению для каждого. Вы * можете * вероятно, заставить его работать с помощью метода 'getAll()', но на самом деле, я думаю, вы захотите использовать [SQLite Database] (http://developer.android.com/guide/topics/data /data-storage.html#db). –

+0

Хорошо спасибо, как вы думаете, я могу получить код запроса PendingIntent, который является основным в onReceive()? – MadBoy