我正在更新客户的应用程序,并且遇到了他们采用的计时器机制的问题。以前他们一直在使用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来丢失任何东西,这会解决问题吗?
答案 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);