在Broadcast Receiver Android中刷新日期

时间:2018-04-09 06:07:04

标签: android broadcastreceiver alarmmanager

我有一个广播接收器课程,我在新的一天开始时打电话。

这是广播接收器onReceive方法。

 @Override
public void onReceive(Context context, Intent intent) {

    context.sendBroadcast(new Intent(NEW_DAY_FROM_RECEIVER));

    Log.d(TAG, "Old day passed, new day in!");

    DateFormat dateFormat = new SimpleDateFormat("EEE, MMM d");
    Date yesterdaysDate = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000L);
    String yesterdaysDateString = dateFormat.format(yesterdaysDate);

// Saving the value 
    DailyPointsItem yesterdayPointsItem = new DailyPointsItem(yesterdaysDateString, String.valueOf(pointsForToday), notEatenItemsArrayList, DailyPointsItem.DAILY_FOOD_POINT);

    Log.d(TAG,"Points: " + yesterdayPointsItem.getTitle() + " : " + yesterdayPointsItem.getDescription());

    addDailyPointsItem(context, yesterdayPointsItem);

 }

 public static void addDailyPointsItem(Context context, DailyPointsItem yesterdayPointsItem) {

    ArrayList<DailyPointsItem> dailyPointsDataList = SharedPreferencesManager.getDailyPointsItemsArrayList(context);

    dailyPointsDataList.add(0, yesterdayPointsItem);

    if(dailyPointsDataList.size()==8){
        dailyPointsDataList.remove(7);
    }


    final SharedPreferences.Editor editor = getSharedPreferences(context).edit();

    Gson gson = new Gson();
    String jsonDailyPointsArray = gson.toJson(dailyPointsDataList);

    editor.putString(JSON_STRING_POINTS_ARRAY, jsonDailyPointsArray);

    editor.apply();



}

这里我存储了字符串yesterdaysDateString(刚刚传递的前一天的字符串),并在其他地方显示这些数据。

我在每天开始时使用AlarmManager调用此广播接收器,在应用启动时在我的主要活动中调用,如下所示:

Intent intent = new Intent(this, NewDayReceiver.class);
AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

Calendar calendar = Calendar.getInstance();

calendar.add(Calendar.DATE, 1);  
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);


if (!calendar.before(Calendar.getInstance())) {
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 24 * 60 * 60 * 1000, pendingIntent); //Repeat every 24 hours
            Log.d(TAG, "New day alarm set for:" + calendar.getTime() + " and will repeat every day");
        }

现在这个工作正常,日期中的每一天都存储在字符串中。但是,只有在每天打开应用程序时才会正确保存日期。如果每天都没有打开应用程序,则AlarmManager正常工作并且广播接收器被调用,但保存的日期是应用程序打开的最后一天的日期。例如,如果应用程序在3月25日星期日开放,并且未开放​​3天。然后存储的三个日期是Sun,3月25日。为什么广播接收器不保存当前日期。

已编辑:在使用手机时有效,但如果手机未使用且闲置,则无法保存正确的日期。为什么会这样呢?

0 个答案:

没有答案