Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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使用API设置精确的重复间隔(无延迟)>;19_Android - Fatal编程技术网

Android AlarmManager使用API设置精确的重复间隔(无延迟)>;19

Android AlarmManager使用API设置精确的重复间隔(无延迟)>;19,android,Android,我正在开发一个Android应用程序,它使用一个我每五分钟用AlarmManager调用一次的服务从惯性传感器收集数据。此服务有一个计时器,仅收集一分钟的数据。所以我想收集一分钟的数据,然后睡眠四分钟(循环过程)。问题在于,在API>19上,带有setRepeating()的AlarmManager不精确(延迟一分钟或更长)。有很多帖子,但没有一个明确的解决方案。。。在主要活动中,我有: public void startservice(View view){ AlarmManager

我正在开发一个Android应用程序,它使用一个我每五分钟用AlarmManager调用一次的服务从惯性传感器收集数据。此服务有一个计时器,仅收集一分钟的数据。所以我想收集一分钟的数据,然后睡眠四分钟(循环过程)。问题在于,在API>19上,带有setRepeating()的AlarmManager不精确(延迟一分钟或更长)。有很多帖子,但没有一个明确的解决方案。。。在主要活动中,我有:

public void startservice(View view){
    AlarmManager scheduler = (AlarmManager) getSystemService(ALARM_SERVICE);
    Intent intent = new Intent(getApplicationContext(), SensorLogger.class);
    PendingIntent scheduledIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
    scheduler.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000 * 5, scheduledIntent);
}
在服务中,比如:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    timer.scheduleAtFixedRate(new stoptask(), 60000, 60000);

...

return START_NOT_STICKY;
}

private class stoptask extends TimerTask
{
    public void run()
    {
        ...

        timer.cancel();
        stopSelf();
    }
}

谢谢

您不能再确切地使用重复api了。您需要设置一个精确的报警,然后在该报警内设置一个新的报警,以便重复

我发布了一个库,负责android上的多定时器实现——看看它可能会有所帮助