我一直使用以下代码每20秒触发一次警报
public class SchedulerSetupReceiver extends BroadcastReceiver {
private static final String APP_TAG = "LOG: ";
private static final int EXEC_INTERVAL = 20 * 1000;
@Override
public void onReceive(final Context ctx, final Intent intent) {
Log.d(APP_TAG, "SchedulerSetupReceiver.onReceive() called");
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(ctx, SchedulerEventReceiver.class);
PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, 0, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar now = Calendar.getInstance();
now.add(Calendar.SECOND, 20);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
now.getTimeInMillis(), EXEC_INTERVAL, intentExecuted);
}
}
代码按预期工作,我在LogCat中每20秒收到一次日志消息。
我想设置每日重复闹钟,每天上午10点开始。但是没有触发警报。我在上午10:00(例如9.59AM)之前更改了模拟器中的时间,然后运行代码。但是,警报不会在上午10:00触发。我还为警报设置了一个id。我还将模拟器中的日期更改为明天。根本没有发出警报。
为什么会出现这种情况的原因?
public class SchedulerSetupReceiver extends BroadcastReceiver {
private static final String APP_TAG = "LOG: ";
private static final int ALARM_ID_2000 = 2000;
//private static final int EXEC_INTERVAL = 20 * 1000;
@Override
public void onReceive(final Context ctx, final Intent intent) {
Log.d(APP_TAG, "SchedulerSetupReceiver.onReceive() called");
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(ctx, SchedulerEventReceiver.class);
PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, ALARM_ID_2000, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(System.currentTimeMillis());
Calendar updateTime = new GregorianCalendar();
//we want to set a daily alarm at 10:00AM
updateTime.add(Calendar.DAY_OF_YEAR, cal.get(Calendar.DAY_OF_YEAR));
updateTime.set(Calendar.HOUR_OF_DAY,10);
updateTime.set(Calendar.MINUTE,0);
updateTime.set(Calendar.SECOND,0);
updateTime.set(Calendar.MILLISECOND,0);
updateTime.set(Calendar.DATE,cal.get(Calendar.DATE));
updateTime.set(Calendar.MONTH,cal.get(Calendar.MONTH));
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
updateTime.getTimeInMillis(), AlarmManager.INTERVAL_DAY, intentExecuted);
}
我已经切换回旧代码,现在我还没有在启动时触发警报。我尝试过以下方法:
昨天正在使用20秒警报,但现在即使该代码也无效。
答案 0 :(得分:0)
问题不是代码而是模拟器。设备视图下的应用程序未显示该过程。我期待在模拟器首次启动时触发警报,但是我必须重新启动仿真器,即从仿真器窗口打开和关闭设备以模仿重启。
模拟器“重新启动”后,警报会按预期启动。
答案 1 :(得分:0)
尝试以下:
public class SchedulerSetupReceiver extends BroadcastReceiver {
private static final String APP_TAG = "LOG: ";
private static final int EXEC_INTERVAL = 20 * 1000;
@Override
public void onReceive(final Context ctx, final Intent intent) {
Log.d(APP_TAG, "SchedulerSetupReceiver.onReceive() called");
AlarmManager alarmManager = (AlarmManager) ctx
.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(ctx, SchedulerEventReceiver.class);
PendingIntent intentExecuted = PendingIntent.getBroadcast(ctx, 0, i,
PendingIntent.FLAG_CANCEL_CURRENT);
Calendar now = Calendar.getInstance();
now.setTimeInMillis(System.currentTimeMillis());
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
now.getTimeInMillis(), EXEC_INTERVAL, intentExecuted);
}
}
我在这里更改的是我添加了now.setTimeInMillis(System.currentTimeMillis());检索当前时间。 还要确保已在清单中添加了接收器。