mob*_*bob 13 android alarmmanager android-pendingintent android-appwidget
我正在按照示例代码每10秒发送一次更新通知.代码如下,它是UpdateService一个AppWidgetProvider.如果我放了一个,Thread.sleep(10*1000);我可以看到我的服务循环的预期行为.我显然有一些根本错误的东西会立即触发.它应该是一个PendingIntent警报,将广播更新给我的听众.
long nextUpdate = 10*1000;
Log.d(TAG, "Requesting next update in " + nextUpdate + " msec." );
Intent updateIntent = new Intent(ACTION_UPDATE_ALL);
updateIntent.setClass(this, UpdateService.class);
PendingIntent pendingIntent = PendingIntent.getService(this, 0, updateIntent, 0);
// Schedule alarm, and force the device awake for this update
AlarmManager alarmManager = (AlarmManager)getBaseContext().getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(),
nextUpdate, pendingIntent);
Run Code Online (Sandbox Code Playgroud)
Fal*_*rri 23
AlarmManager.setRepeating定义为public void setRepeating (int type, long triggerAtTime, long interval, PendingIntent operation)第二个参数是应该首次调用它.你告诉它从SystemClock.elapsedRealtime()现在开始.
Com*_*are 16
你告诉setRepeating()你要立即关闭第一个警报(SystemClock.elapsedRealtime()).如果您希望第一个警报在其他时间关闭,请添加偏移量(SystemClock.elapsedRealtime()+nextUpdate).
如果您要为过去的时间创建警报的PendingIntent,它将立即被触发.示例 - 为今天上午8点安排警报,但在上午11点左右执行代码将立即触发.
解:
cal.add(Calendar.DATE, 1);
long delay = 24 * 60 * 60 * 1000;
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);`
Run Code Online (Sandbox Code Playgroud)
这将在第二天的特定时间(即早上8点)发射事件;