Сбрасывать целое число ежедневно, в определенное время
Мне нужно сбросить целое число "ежедневно" в определенное время суток. В своей деятельности я записываю значение дня в общие предпочтения, а затем с помощью диспетчера аварийных сигналов и приемника вещания пытаюсь установить его на ноль. все работает, кроме общих предпочтений, и ценность все еще остается такой, какой она была. Я думаю, что мне нужно импортировать другой контекст для общих префов. Любая помощь приветствуется.
Получатель:
public void onReceive(Context context, Intent intent) {
final SharedPreferences shared = context.getSharedPreferences("Mydata", MODE_PRIVATE);
final SharedPreferences.Editor editor = shared.edit();
int sum = shared.getInt("data1", 0);
Calendar c = Calendar.getInstance();
String date = String.valueOf(c.get(Calendar.DATE));
mainData.insert_data(date, sum);
int zero = 0;
editor.putInt("data1", zero);
editor.apply();
}
Диспетчер сигнализации:
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 22);
calendar.set(Calendar.MINUTE, 45);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
final Context context = this.getContext();
PendingIntent pi = PendingIntent.getService(context, 0,
new Intent(context, MyAppReciever.class),PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, pi);
Общие настройки в Основном действии:
final SharedPreferences shared = this.getContext().getSharedPreferences("Mydata", MODE_PRIVATE);
final SharedPreferences.Editor editor = shared.edit();
editor.putInt("data1", 0);
editor.putInt("month", 0);
final int today212 = shared.getInt("data1", 0);
final int mesec212 = shared.getInt("month", 0);
final int limit212 = shared.getInt("budget", 0);
1 ответ
Поэтому я внес несколько изменений в код и добавил код запроса PendingIntent. Код выглядит так
Место, где вы установили будильник:
public void scheduleTestAlarmReceiver(Context context) {
Intent receiverIntent = new Intent(context, MyAppReciever.class);
PendingIntent sender = PendingIntent.getBroadcast(context, 123456789, receiverIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 58);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, sender);
}
и место, где вы планируете это (скажем, по клику):
Context cn= this.getContext();
scheduleTestAlarmReceiver(cn);
Вещательный приемник должен быть таким же, как указано выше. А также не забудьте добавить получателя в манифест:
<receiver android:name=".MyAppReciever"></receiver>