有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用AlarmManager设置报警。已用\u实时\u唤醒

我希望警报服务每1小时广播一次意图

我使用RTC_WAKEUP进行此操作,如下所示:

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, AlarmSheduleHelper
                .getImmediateNextHour().getTimeInMillis(),
                AlarmManager.INTERVAL_HOUR, pendingIntent);

现在,我想使用经过的\u实时\u唤醒来完成它。我怎么做

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, ELAPSED_TIME_REAL_OF_STARTING_HR, AlarmManager.INTERVAL_HOUR, pendingIntent);

如何使ELAPSED_TIME_REAL_OF_STARTING_HRie elapsedRealtime与启动hr相对应


共 (5) 个答案

  1. # 1 楼答案

    这将在1小时内唤醒设备并触发警报,此后每1小时:

    alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, AlarmManager.INTERVAL_HOUR, AlarmManager.INTERVAL_HOUR, pendingIntent);
    
  2. # 2 楼答案

    AOSP API演示的代码片段:

            // We want the alarm to go off 1hr from now.
            long firstTime = SystemClock.elapsedRealtime();
            firstTime += 60 * 60 * 1000;
    
            // Schedule the alarm!
            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
            am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                            firstTime, 60*60*1000, sender);
    

    您可能希望按照link查看完整的示例

    如果您希望闹钟在一小时内(凌晨1点、凌晨2点,…)响起,将类型指定为RTC_唤醒

  3. # 3 楼答案

    从现在起一小时的实时时间应为:

    System.currentTimeMillis() + (60 * 60 * 1000); // 60 minutes

  4. # 4 楼答案

    我认为accuya的答案应该有效,我只是改进了它,让闹钟在每小时开始时响起

    首先,确定在第一次报警前应跳过的时间间隔:

    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.HOUR_OF_DAY, 1);
    calendar.clear(Calendar.MINUTE);
    calendar.clear(Calendar.SECOND);
    calendar.clear(Calendar.MILLISECOND);
    long firstAlarmInterval = calendar.getTimeInMillis() - System.currentTimeMillis();
    

    因此,如果当前时间为7:35,则firstAlarmInterval将表示在8:00首次发射之前所需的25分钟

    long firstTime = SystemClock.elapsedRealtime() + firstAlarmInterval;
    
    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                        firstTime, 60*60*1000, sender);
    
  5. # 5 楼答案

    android系统中没有已用\u时间\u实时\u开始\u HR标志,您必须在alarmManager中指定警报的开始时间来代替此标志。setRepeating()方法