如何使重复报警更准确?

时间:2017-04-05 08:53:12

标签: android android-notifications android-alarms

我想制作一个重复警报通知,该通知将在一天中的特定时间触发。我发出的重复警报很好地发出警报,但有时会在设定的时间内关闭警报。例如,我在早上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());

1 个答案:

答案 0 :(得分:1)

来自Android Developers

  

如上所述,选择警报类型通常是创建警报的第一步。另一个区别是您需要警报的准确程度。对于大多数应用程序,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);