2

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

我发现警报管理器工作不正常,我设置了一个小时的间隔,但它在 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

开始2013-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 点之后它工作正常!!!如何修复它。我需要每隔一小时启动一次警报,而不是在那之前。

4

3 回答 3

1

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

于 2013-05-14T05:54:18.403 回答
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());
    }
 }

(如何取消警报在这个答案中得到了很好的回答

于 2013-05-14T05:54:07.867 回答
0

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

完全不需要计算任何东西。日历中的 HOUR 并将其用作间隔。每次小时更改时都会调用 HOUR。这就是它的全部内容。

某些设备可能需要稍作调整,以确保连续调用的 HOUR 不是同一个。这是由于某些设备有时会在分钟更改时调用 HOUR。

于 2015-09-26T18:14:40.250 回答