Сбрасывать целое число ежедневно, в определенное время

Мне нужно сбросить целое число "ежедневно" в определенное время суток. В своей деятельности я записываю значение дня в общие предпочтения, а затем с помощью диспетчера аварийных сигналов и приемника вещания пытаюсь установить его на ноль. все работает, кроме общих предпочтений, и ценность все еще остается такой, какой она была. Я думаю, что мне нужно импортировать другой контекст для общих префов. Любая помощь приветствуется.

Получатель:

 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>
Другие вопросы по тегам