【问题标题】:Android - Alarm Manager to run a service at 5am each morningAndroid - 每天早上 5 点运行警报管理器的服务
【发布时间】:2013-04-03 19:41:05
【问题描述】:

我需要在每天早上 5 点运行我的更新服务,以便在用户早上拿起手机时刷新数据。我到目前为止的代码是 -

Log.d(TAG, "setAutoRun");
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, RefreshIntentService.class);
PendingIntent pendingI = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar time = Calendar.getInstance();

time.setTimeInMillis(System.currentTimeMillis());

time.add(Calendar.SECOND, 60); // this was just to test out the alarm service
alarmMgr.set(AlarmManager.RTC, time.getTimeInMillis(), pendingI);

如何修改它以使其在每天早上 5 点运行? 我知道我可以设置一个间隔,让它在 X 分钟内再次运行,但如果用户不打开它,我怎么能在早上 5 点开始它。

谢谢

【问题讨论】:

    标签: android date time alarmmanager


    【解决方案1】:

    我相信像这样编辑您的Calendar params 应该可以工作并更改为setRepeating()

    Calendar time = Calendar.getInstance();
    time.set(Calendar.HOUR_OF_DAY, 5);   
    
    alarmMgr.setRepeating(AlarmManager.RTC, time.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingI);
    

    AlarmManager.INTERVAL_DAY

    【讨论】:

    • 另外,顺便说一句,setRepeating 方法需要 4 个参数,所以它看起来像这样-alarmMgr.setRepeating(AlarmManager.RTC, time.getTimeInMillis(),86400000 , pendingI);86400000 是 24 小时(以毫秒为单位)
    • 是的,抱歉,我赶时间了。我已经编辑了我的答案,谢谢。 AlarmManager 有我在编辑中输入的常量。
    • 我使用了上面的代码,但仍然无法正常工作。警报管理器在午夜没有执行我的任务。 time.set(Calendar.HOUR_OF_DAY, 0);
    • @codeMagic,我用过 Calendar time = Calendar.getInstance(); time.set(Calendar.HOUR_OF_DAY, 9);用于在上午 9 点开始闹钟。但是一旦我开始我的主要活动,警报就会设置。但它应该只在上午 9 点开始。
    【解决方案2】:

    您可以使用 setRepeating 方法,其中您可以通过特定时间。看这个例子:

    private void scheduleAlarms() {
            Intent intent = new Intent(mContext, AlarmActivity.class);
            mPendMorInt = PendingIntent.getActivity(
                    mContext, Constants.ALARM_MORNING_CODE, intent, PendingIntent.FLAG_CANCEL_CURRENT);
            mPendAftInt = PendingIntent.getActivity(
                    mContext, Constants.ALARM_AFTERNOON_CODE, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    
            List<Long> alarms = SelectorAlarm.timeAlarms(mContext);
            if (alarms.size() >= 1) {
                mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
                mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, getRightTimeAlarm(alarms.get(Constants.MORNING)),
                        AlarmManager.INTERVAL_DAY, mPendMorInt);
                mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, getRightTimeAlarm(alarms.get(Constants.AFTERNOON)),
                        AlarmManager.INTERVAL_DAY, mPendAftInt);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多