启动服务,每小时重复一次,并以固定的时间间隔获取信息

时间:2013-05-14 05:30:51

标签: android alarmmanager android-alarms

我设置了重复的报警管理器来启动获取位置和发送短信的服务,但目前我只在文件中写入持续时间来检查报警的准确性。

我发现警报管理器工作不正常,我设置了一个小时的间隔,但它在30分钟时开火。间隔。我离开了一天,发现在12点钟之后,报警准确度是正确的。发生了什么 ??

我的Activity类启动闹钟:

enter code here

         public static final long ALARM_TRIGGER_AT_TIME = SystemClock.elapsedRealtime() + 20000;
         public static final long ALARM_INTERVAL = 1000 * 60 * 60 ;

         AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

         Intent myIntent = new Intent(AutoMainActivity.this, TrackerService.class);

         pendingIntent = PendingIntent.getService(AutoMainActivity.this, 0, myIntent, 0);

         alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,ALARM_TRIGGER_AT_TIME, 1000 * 60 * 60,pendingIntent);    

和我的服务类:

TraceService :

  public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);

    //writing in file to view time
    java.util.Date systemDates = Calendar.getInstance().getTime(); 
    simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
    currentTime = simpleDateFormat.format(systemDates);

            // create file and write current time
    generateNoteOnSD("ONSTART"+currentTime+"\n","Onstart.txt"); 

}

在下午3:18执行此应用程序。服务创建的文件显示闹钟时间。检查一下:

alarm manager time 

ONSTART2013-05-13-15:18:26

ONSTART2013-05-13-15:21:58

ONSTART2013-05-13-15:54:21

ONSTART2013-05-13-16:18:25

ONSTART2013-05-13-17:18:26

ONSTART2013-05-13-17:49:21

ONSTART2013-05-13-18:18:25

ONSTART2013-05-13-19:18:28

ONSTART2013-05-13-20:10:51

ONSTART2013-05-13-20:18:29

ONSTART2013-05-13-20:48:49

ONSTART2013-05-13-21:18:30

ONSTART2013-05-13-21:58:58

ONSTART2013-05-13-22:18:38

ONSTART2013-05-13-22:56:00

ONSTART2013-05-13-23:18:43

ONSTART2013-05-13-23:48:49

ONSTART2013-05-14-00:18:44

ONSTART2013-05-14-01:18:45

ONSTART2013-05-14-02:18:45

ONSTART2013-05-14-03:18:45

ONSTART2013-05-14-04:18:45

ONSTART2013-05-14-05:18:44

ONSTART2013-05-14-06:18:44

ONSTART2013-05-14-07:18:44

您可以检查当警报管理器在下午15:18开始时,它会在30分钟后再次启动。约。但是在12点钟之后它工作得很好!!!如何解决它。我需要在那之前每隔一小时开始报警。

3 个答案:

答案 0 :(得分:1)

尝试使用AlarmManager.RTC_WAKEUP一次而不是AlarmManager.ELAPSED_REALTIME_WAKEUP 这里有一个例子:Alarm Manager Example

答案 1 :(得分:0)

我怀疑你有多个待处理的警报。我建议您在设置此警报之前清除所有警报。

 public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);

    // Cancel alarms
    try {
        alarmManager.cancel(intent);
    } catch (Exception e) {
        Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
    }
 }

(如何取消警报在this answer

中得到了很好的解答

答案 2 :(得分:0)

不确定为什么每个人都如此复杂化这个问题。我到处都看到它。关于计算下一个小时的答案和答案。

绝对没有必要计算任何东西。来自日历的HOUR并将其用作间隔。每次小时改变时都会调用HOUR。这就是真的。

某些设备可能需要稍微调整以确保连续两次调用的HOUR不同。这是因为有些设备有时在分钟变化时调用HOUR。