即使应用程序未运行,也会在精确时间启动alarmManager

时间:2015-11-14 10:49:20

标签: android service notifications broadcastreceiver alarmmanager

我正在编写一个Android应用程序,其中包含截止日期列表,我想通知用户,当时间到了,即使应用程序未运行,其中一个应用程序已在截止日期到期时过期。 我使用了一个AlarmManager,一个自定义的BroadcastReceiver和一个自定义的Services类,但即使我给出了警报的准确时间,它也只会在我运行应用程序时触发通知。 这是我设置闹钟的地方:

this[elementToToggle]

这是BroadcastReceiver:

methods: {
  enableExtraPriceField: function(elementToToggle) {
    this[elementToToggle] = true;
    var el = document.getElementById(elementToToggle);
    el.disabled = false;
    el.placeholder = '';
    el.focus();       
  }
}

这是服务类:

public static void setAlarm( String string){
          AlarmManager alarms =(AlarmManager)Utility.getContext().getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(ALARM_INTENT_FILTER);
    intent.putExtra("content",string);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(Utility.getContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 12);
    calendar.set(Calendar.MINUTE,00);
    calendar.set(Calendar.SECOND,00);
    calendar.set(Calendar.MILLISECOND,00);
    calendar.set(Calendar.AM_PM,Calendar.PM);

    alarms.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}

这是我注册服务和接收者的清单:

public class NotificationReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service1 = new Intent(context, NotificationServices.class);
        service1.putExtra("content",intent.getStringExtra("content"));
        context.startService(service1);
    }
}

错误在哪里?为什么只有在我打开应用时,而不是在当天的确切时间或应用未运行时才会触发通知?

1 个答案:

答案 0 :(得分:1)

来自AlarmManager

的API
  

注意:从API 19开始,所有重复警报都不准确。如果您的应用程序需要精确的交付时间,那么它必须使用一次性精确警报,每次重新安排如上所述。 targetSdkVersion早于API 19的旧应用程序将继续将所有警报(包括重复警报)视为完全警报。