我在执行以下代码时遇到问题:
Intent myIntent = new Intent(MedicineEntry.this, DisplaySchedule.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MedicineEntry.this, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 25);
calendar.set(Calendar.SECOND, 0);
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 1);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
Toast.makeText(MedicineEntry.this, "Alarm Will Start In A Second", Toast.LENGTH_LONG).show();
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, pendingIntent);为了说明我的问题,应用程序应该根据HOUR_OF_DAY、分钟和秒的值启动-即使设备处于睡眠模式。我试过测试代码,但应用程序似乎不起作用。我试过用5*1000替换AlarmManager.INTERVAL_FIFTEEN_MINUTES,它工作得很好。请不要使用这些术语。我在大学这个学期才开始用Android编程。
编辑:我正在创建的这个应用程序是一个“提醒”应用程序。用户需要输入应用程序应该执行的时间。
发布于 2014-10-08 19:50:11
基本上有两种与AlarmManager交互的方式。你的帖子对于哪一个适合你的需求有点含糊。
无论如何,如果你想要一个“每15分钟做一次”的类型的闹钟,使用流逝模式:
long firstActivation = SystemClock.elapsedRealtime(); // and not System.currentTimeMillis()
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstActivation, INTERVAL_MILLISECS, intent); 但是,如果您正在寻找“每天在15:30做”语义,请使用模式,如下所示:
long activationTime = calendar.getTimeInMillis();
long TWENTY_FOUR_HRS = 24 * 60 * 60* 1000;
mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, activationTime, TWENTY_FOUR_HRS, intent);在上面的代码中需要注意两件事:
A.我使用的是唤醒类型的警报。这可能很昂贵,因为它们会唤醒睡眠中的设备。你确定这是你需要的吗(提示:大多数应用程序不需要)?
B.我正在使用setInexactRepeating()而不是setRepeating(),因此允许报警管理器将多个报警批处理在一起,从而节省资源。如果您没有充分的理由不这样做,请坚持使用setInexactRepeating()
https://stackoverflow.com/questions/26255759
复制相似问题