我想制作一个重复警报通知,该通知将在一天中的特定时间触发。我发出的重复警报很好地发出警报,但有时会在设定的时间内关闭警报。例如,我在早上6点设置了一个警报,但在第一个触发后第二天它在早上6:15开始,所以我想知道它们是否更准确地设置警报?
这是我重复闹钟的代码
Calendar calendar_dog= Calendar.getInstance();
calendar_dog.set(Calendar.HOUR_OF_DAY,7);
calendar_dog.set(Calendar.MINUTE,0);
calendar_dog.set(Calendar.SECOND,0);
Intent intent= new Intent(getApplicationContext(), notify_dog.class);
PendingIntent dog_intent=PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager dog_alarm =(AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE);
dog_alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar_dog.getTimeInMillis(),AlarmManager.INTERVAL_DAY,dog_intent);
和我的收件人
NotificationManager notify_dog=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent dog_intent= new Intent(context, HomeActivity.class);
dog_intent.setFlags(dog_intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent dog_pending=PendingIntent.getActivity(context,100,dog_intent,PendingIntent.FLAG_UPDATE_CURRENT);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder dog_build= new NotificationCompat.Builder(context).setContentIntent(dog_pending).
setSmallIcon(R.drawable.pet)
.setContentTitle("Pet Guide 101")
.setContentText("have you feed your Dog?")
.setSound(alarmSound)
.setAutoCancel(true);
notify_dog.notify(100,dog_build.build());
答案 0 :(得分:1)
如上所述,选择警报类型通常是创建警报的第一步。另一个区别是您需要警报的准确程度。对于大多数应用程序,setInexactRepeating()是正确的选择。当您使用此方法时,Android会同步多个不精确的重复警报并同时触发它们。这样可以减少电池的消耗。
对于具有严格时间要求的罕见应用程序 - 例如,警报需要在上午8:30精确点火,之后每小时点击一次 - 使用setRepeating()。但是如果可能的话,你应该避免使用精确的警报。
使用setInexactRepeating(),您无法使用setRepeating()指定自定义间隔。您必须使用其中一个区间常量,例如INTERVAL_FIFTEEN_MINUTES,INTERVAL_DAY等。有关完整列表,请参阅AlarmManager。
所以,为了达到你想要的效果,你需要像这样使用它:
dog_alarm.setRepeating(AlarmManager.RTC_WAKEUP,calendar_dog.getTimeInMillis(),AlarmManager.INTERVAL_DAY,dog_intent);