Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Alarmmanager-每分钟顶部的火灾警报_Android_Android Widget_Alarmmanager - Fatal编程技术网

Android Alarmmanager-每分钟顶部的火灾警报

Android Alarmmanager-每分钟顶部的火灾警报,android,android-widget,alarmmanager,Android,Android Widget,Alarmmanager,我正试图在每一分钟的顶端发出警报。但由于某种原因,它不想工作。它是一个小部件时钟,应该每分钟更新一次。由于电池的原因,我做了一个屏幕关闭和打开的接收器。所以我的闹钟只有在屏幕打开时才会响。分钟应该与我的系统时钟同步 public static void startClockTickAlarm() { AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALA

我正试图在每一分钟的顶端发出警报。但由于某种原因,它不想工作。它是一个小部件时钟,应该每分钟更新一次。由于电池的原因,我做了一个屏幕关闭和打开的接收器。所以我的闹钟只有在屏幕打开时才会响。分钟应该与我的系统时钟同步

        public static void startClockTickAlarm() {
            AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALARM_SERVICE);             
            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.add(Calendar.SECOND, 1);       
            calendar.add(Calendar.HOUR, 1);
            alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
        }

        public static final long utcMillisNextMin() {
            Time t = new Time();
            t.setToNow();
            t.second = 0;
            t.minute++;
            System.out.println("Next Alarm: " + t.hour + ":" + t.minute + ":" + t.second);
            return t.normalize(true);
        }
我的System.out给了我应该做的。例如,我在11:30:15启用我的小部件,返回的结果是11:31:00-这意味着我的闹钟应该首先在11:31触发。根据我的系统时钟,闹钟晚了5-15秒。警报发出得太晚的秒数并不总是相同的(在5到15秒之间)


提前谢谢

中有以下声明:

注:自API 19起,所有重复报警均不准确。如果你的 应用程序需要精确的交付时间,然后必须使用一次性交付 准确的警报,按上述每次重新安排。遗产 targetSdkVersion早于API 19的应用程序将 继续保持所有警报,包括重复警报, 被视为精确的

如果您运行的是Android 4.4.4,那么这可能就是原因

如前所述,API>=19如果必须使用精确计时,请使用API

if(android.os.Build.VERSION.SDK_INT<19){
alarmManager.setRepeating(alarmManager.RTC,utcMillisNextMin(),60000,createClockTickIntent(_context));
}否则{
alarmManager.setExact(…);
}

您的设备上有哪种API级别?如果出现故障,请发布logcat输出。我的设备是android 4.4.4,我的目标是21,min API是14.4。所以我想我的函数应该是设置窗口。因此,对于仍然使用min api 14,我是否应该为当前api创建一个检查函数,并在api低于19时使用我的当前函数,或者使用setWindow函数?@user2887326您应该使用setExact。我的代码在
if
块中是向后的。请查收。
if(android.os.Build.VERSION.SDK_INT < 19) {
    alarmManager.setRepeating(AlarmManager.RTC, utcMillisNextMin(), 60000, createClockTickIntent(_context));
} else {
    alarmManager.setExact(...);
}