我阅读量很大,但我认为这个问题没有明确/完整的答案。
首先澄清一些事情: 这个问题不关心手机上的省电,而是更多关于精确计时的问题,我是Android的新手。
现在让我更深入地解释这个问题。我有一个报警管理器,它会在给定的时间间隔内(每2分钟)调用一次祝酒(为简单起见)manager.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis(), interval, pendingIntent);
以上将在BroadcastReciver上调用onReceive()方法。
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Toast ....bala blah
}}
现在这是API< 19的确切间隔但是在API => 19 setRepeating()不再是准确的了!我发现有人建议(在其他表格上)使用setExact()。但是没有关于如何在Interval中使用setExact()的示例或明确说明(或者我找不到)。据我所知,setExact()与offRepeating()不同,因此根据其他人的说法,下一个时间表需要通过onReceive()设置(再次我找不到一个例子;(。无论如何这就是我现在所处的位置)。我真的感谢任何评论或建议或链接或示例......
我希望我能够清楚地问我的问题,顺便说一句,如果还有另一种方法(在API> 19中按照精确的时间间隔运行任务,请告诉我)非常感谢
答案 0 :(得分:9)
您可以使用与setExact
类似的setRepeating
。
void scheduleAlarm(Context context) {
AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent yourIntent = new Intent();
//TODO configure your intent
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, MyApplication.ALARM_REQUEST_CODE, yourIntent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP, timeToWakeUp, alarmIntent);
}
两个不同之处是:
您必须在BroadcastReceiver的onReceive
中安排下一次出现。
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO process alarm
scheduleAlarm(context);
}}