Android API 15及更高版本上的准确定时器

时间:2015-01-08 16:30:24

标签: android timer alarmmanager android-4.4-kitkat

我正在更新客户的应用程序,并且遇到了他们采用的计时器机制的问题。以前他们一直在使用AlarmManager.setRepeating来创建一个在指定的时间间隔后重复出现的警报。

AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, OnAlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);    
mgr.setRepeating(
        AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime() + interval, 
        interval, 
        pi
);

从Android 4.4开始,这导致时间不准确,所以我尝试用精确的计时器替换它。

mgr.setExact(
        AlarmManager.ELAPSED_REALTIME_WAKEUP, 
        SystemClock.elapsedRealtime() + interval, 
        pi
);

然而,setExact只能从API 19获得。目前MinSDK设置为15,Target设置为21.虽然我认为我可以简单地将最小API设置为19,但客户仍然希望支持运行API的设备15- 18。

有没有办法支持这两个进程,在API 15-18上使用setRepeating,然后在19 +上使用setExact?

编辑:通过将目标API从21降至18来丢失任何东西,这会解决问题吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Build.VERSION.SDK_INT(Retrieving Android API version programmatically

获取已安装操作系统的版本
if (Build.VERSION.SDK_INT >= 19)
    mgr.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, pi);
else if (Build.VERSION.SDK_INT >= 15)
    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + interval, interval, pi);