AlarmManager使用API​​> 19

时间:2016-07-20 14:44:10

标签: android

我正在开发一款Android应用程序,它使用我每隔五分钟调用一次AlarmManager的服务从惯性传感器收集数据。此服务有一个计时器,只收集一分钟的数据。所以我想收集一分钟的数据并睡四分钟(循环过程)。问题是具有setRepeating()的AlarmManager在API> 19上不准确(延迟一分钟或更长时间)。有很多帖子但不是一个明确的解决方案......在MainActivity中我有:

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();
    }
}

谢谢!

1 个答案:

答案 0 :(得分:5)

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

我发布了一个库来处理android上的多个计时器实现 - 看看http://gabesechansoftware.com/timers-in-android/它可能会有所帮助。