我的应用中发出警报:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState){
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.curentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 11);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = Pending.getBroadcast(this, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntente);
}
}
这是我的AlarmReceiver.class
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
System.out.println("ALARM: " + sdf.format(new Date()));
}
}
在我的AndroidManifest.xml中,我有这一行
<receiver android:name=".main.AlarmReceiver" />
问题是警报在我设定的时间内没有发出警报。我为
设置闹钟calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 5);
然后警报在11:11:29
发出警报。然后我为
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 20);
然后警报在11:26:29
发出警报。然后我为
calendar.set(Calendar.HOUR_OF_DAY, 11);
calendar.set(MINUTE, 29);
然后警报在11:41:29
发出警报。
整个上午都是这样。但是,如果我替换这一行
alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntente);
这一行
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, (SystemClock.elapsedRealtime()+10000), pendingIntent);
然后警报在适当的10秒内完美报警。
发生了什么事?
答案 0 :(得分:1)
根据文档,setInexactRepeating在设计上并不准确。为了通过多次唤醒设备来减少电池消耗,它会在内部尝试同时触发多个警报,从而导致某些客户的警报时间不准确。 https://developer.android.com/reference/android/app/AlarmManager.html#setInexactRepeating(int,%20long,%20long,%20android.app.PendingIntent)