繁体   English   中英

使用重复警报编辑共享首选项

[英]Edit shared preferences using repeating alarm

我试图在一天结束时更改共享首选项文件的一个键。 所以这是我在网上找到的:

boolean alarmUp = (PendingIntent.getBroadcast(this, 0,
                    new Intent(this, AlarmResetFoodAdded.class),
                    PendingIntent.FLAG_NO_CREATE) != null);
if (!alarmUp) {
    setAlarm();
}

函数setAlarm():

private void setAlarm() {
    alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmResetFoodAdded.class);
    alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 14);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
         AlarmManager.INTERVAL_DAY, alarmIntent);
}

AlarmResetFoodAdded.java:

@Override
public void onReceive(Context context, Intent intent)
{
    pref = context.getSharedPreferences(AppControl.PREF, Activity.MODE_PRIVATE);
    prefEditor = pref.edit();

    prefEditor.putInt("foodAdded", 0);
    prefEditor.commit();
}

我正在使用API​​ 28的设备模拟器对此进行测试。我尝试将时间设置为大约13:59。 然后,我要等到14:01左右,因为它处于精确重复中,但是即使重新打开应用程序,首选项文件中的关键foodAdded也保持不变。

我非常确定警报已启动,因为当我调试alarmUp时,该值第一次为false,然后当我重新打开它时为true。

我认为您应该使用prefEditor.apply(); 而不是prefEditor.commit(); 在您的onReceive方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM