首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlarmManager安卓软件开发工具包

AlarmManager安卓软件开发工具包
EN

Stack Overflow用户
提问于 2014-10-08 19:25:47
回答 1查看 99关注 0票数 1

我在执行以下代码时遇到问题:

代码语言:javascript
复制
            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编程。

编辑:我正在创建的这个应用程序是一个“提醒”应用程序。用户需要输入应用程序应该执行的时间。

EN

回答 1

Stack Overflow用户

发布于 2014-10-08 19:50:11

基本上有两种与AlarmManager交互的方式。你的帖子对于哪一个适合你的需求有点含糊。

无论如何,如果你想要一个“每15分钟做一次”的类型的闹钟,使用流逝模式:

代码语言:javascript
复制
long firstActivation = SystemClock.elapsedRealtime(); // and not System.currentTimeMillis()
mgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstActivation, INTERVAL_MILLISECS, intent); 

但是,如果您正在寻找“每天在15:30做”语义,请使用模式,如下所示:

代码语言:javascript
复制
  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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26255759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档