0

我的应用程序中有此代码

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 设置一个警报,但实际上它会在每次应用程序启动时触发此警报,或者当我返回主要活动时。我想每天在这个特定时间显示这个闹钟

4

3 回答 3

3

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

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

于 2013-09-20T12:50:35.323 回答
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);

完成...我在我的应用程序中使用这种方式...试试看..它适用于美国。如果您需要我的代码... mailto:ramesh.mnnit@gmail.com

于 2013-09-20T12:56:11.840 回答
0

将您的系统时间与闹钟时间进行比较..如果闹钟时间小于等于系统时间接收器将工作..但如果不是,则不会发生任何事情...请按照以下链接了解详细信息-每次打开应用程序时都会触发预定通知

于 2017-06-24T11:16:03.210 回答