我们可以在alarmmanager中使用setrepeating来改变值吗?例如,
alarm.setRepeating(AlarmManager.RTC_WAKEUP, 0,
AlarmManager.INTERVAL_DAY*14, pi);
将间隔设置为14天。但是如果我的手机重新启动,闹钟会从开始重置。我可以将下一个报警的值写入SD卡上的文件,但我很困惑如何在报警管理器中调用该值?
---------------------------------更新2 ------------ -----------
更新的逻辑是: 在广播接收器中:
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
在主要活动中:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
long nextTime = prefs.getLong("timerval", 0);
Intent ishintent = new Intent(this, MyService.class);
PendingIntent pi = PendingIntent.getService(this, 0, ishintent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, nextTime,
AlarmManager.INTERVAL_DAY*14, pi);
虽然,MyService是一项启动我实际活动的服务,但在该活动中,当用户点击“提交”按钮时,在保存数据后,计算下一个计时器开火时间并保存如下:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
Editor editor = prefs.edit();
Long nextint = System.currentTimeMillis() + 60000;
editor.putLong("timerval", nextint );
editor.commit();
但问题是手机重启应用程序仍然弹出窗口。有什么想法吗?
答案 0 :(得分:0)
我假设您要将闹钟设置为手机重启后存储在SharedPreferences
中的值。在这种情况下,您需要获得BOOT_COMPLETED
意图(请参阅this relevant SO question - 您需要设置BroadcastReceiver
)。然后设置闹钟:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
long nextTime = prefs.getLong("timerval", 0);
alarm.setRepeating(AlarmManager.RTC_WAKEUP, nextTime,
AlarmManager.INTERVAL_DAY*14, pi);
您对AlarmManager.setRepeating(...)
的调用有错误的论点。请注意docs。 setRepeating
的参数是(按顺序):类型,下次触发,[第一次警报触发后]警报之间的间隔,然后是待处理的意图。您目前将时间设置为0ms
,我认为这不是您想要的。相反,您希望它是SharedPreferences
的时间。
编辑:您似乎错误地使用了BroadcastReceiver
。现在你正在使用它来启动MainActivity
(这就是电话重启时弹出的原因)但你需要的是设置AlarmManager
。因此,创建一个新的Service
,并在该服务中设置AlarmManager
,并在BroadcastReceiver
中,而不是在startActivity()
上调用MainActivity
,请致电{新startService()
上的{1}}。 (请记住在设置Service
后结束服务)