我设置了重复的报警管理器来启动获取位置和发送短信的服务,但目前我只在文件中写入持续时间来检查报警的准确性。
我发现警报管理器工作不正常,我设置了一个小时的间隔,但它在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点钟之后它工作得很好!!!如何解决它。我需要在那之前每隔一小时开始报警。
答案 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。