每次应用程序启动时,AlarmManager都会触发

时间:2013-09-20 12:44:08

标签: java android alarmmanager

我在我的应用中有这段代码

Calendar calendar = Calendar.getInstance();

          calendar.set(Calendar.HOUR_OF_DAY, 11);
          calendar.set(Calendar.MINUTE, 30);
          calendar.set(Calendar.SECOND, 0);
          calendar.set(Calendar.AM_PM,Calendar.AM);
        //Debug!!!!!
        //calendar.set(Calendar.SECOND, Calendar.SECOND+5);
          Intent myIntent = new Intent(MainActivity.this, MyReceiver.class);
          pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0);

          AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
          alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY ,pendingIntent);

理论上它每天上午11:30设置一个警报,但实际上它每次应用程序启动时或当我返回主要活动时都会发出警报。 我想在这个特定时间每天显示此警报

3 个答案:

答案 0 :(得分:3)

这将立即触发当前时间是在上午11:30之后,因为您将Calendar对象设置为过去。

一种解决方案是将您的Calendar与当前时间(System.currentTimeMillis())进行比较,并在Calendar过去时添加一天。

答案 1 :(得分:0)

alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY ,pendingIntent);

此处重复警报的时间由calendar.getTimeInMillis()功能给出。 这将占用当前时间并且警报将会触发。 对.. 假设您想在几秒钟之后发出警报,那么您必须以毫秒为单位给出时间

calendar.getTimeInMillis() + 10000; //here 10000 is milliseconds 

因此,当你想要发出警报时,首先需要做的是以毫秒为单位计算时间。  让我们说

interval = nnnnnnnn; // replace nnnnnn with your time interval in milliseconds
calendar.getTimeInMillis()+ interval;

alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis()+interval, AlarmManager.INTERVAL_DAY ,pendingIntent);

完成......  这种方式我在我的应用程序中使用...尝试它..它将适用于U. 如果你需要我的代码... mailto:ramesh.mnnit@gmail.com

答案 2 :(得分:0)

将您的系统时间与闹钟时间进行比较..如果闹钟时间小于等于系统时间接收器将起作用..但如果没有,则不会发生任何事情...请按照以下链接获取详细信息 - Scheduled Notifications Triggers Every Time I Open App