【问题标题】:set android alarm at specific time在特定时间设置android闹钟
【发布时间】:2011-12-29 17:01:21
【问题描述】:

我在特定时间设置了闹钟,但每次我打开应用程序时它都会打开 这是我使用的代码:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0010000,intent,0);

Calendar time = Calendar.getInstance();
time.set(Calendar.HOUR, 5);
time.set(Calendar.MINUTE, 59);
time.set(Calendar.SECOND, 0);

alarmManager.set(AlarmManager.RTC,time.getTimeInMillis(),pendingIntent);

【问题讨论】:

  • 闹钟设置在 5:59:00 但是当我离开应用程序并再次打开它时,闹钟会再次设置,我如何避免这个问题并将闹钟设置为 5: 59:00 !

标签: android date alarmmanager


【解决方案1】:

不要将此代码放在 onCreate 函数中,而是将其放在任何按钮事件或任何其他仅在用户交互时调用的事件中。 我想,就可以了。

PendingIntent pendingIntent =  PendingIntent.getBroadcast(this,0010000,intent,0);
pendingIntent.cancel();

将此“取消”方法添加到您的代码中。这将在设置新警报之前取消之前的警报。

【讨论】:

  • 时间 5:59:00 取自 Web 服务器数据库,我想在没有按钮事件的情况下通知用户,我的意思是在后台但我不知道该怎么做跨度>
  • 我同意将它放在按钮监听器中,但我怀疑这是问题所在。
  • 您将多久检查一次数据库以获取本次(5:59:00)的更新?如果您检查,请在该方法中设置此警报。
  • 这个时间将只从网络服务器获取一次,我的意思是每天 5:59:00 我希望设置闹钟,更清楚的是我的应用程序用于患者和那里是一个医生的网站,我想让医生提醒病人什么时候应该吃药。我不想使用动作监听器或按钮,我只需要在这个时候设置警报
  • 即使在这种情况下,你也会有一种方法来检查数据库。如果医生在网站上设置为 5:59,您将使用一些代码将其带到应用程序。每次应用启动时你都从数据库读取数据吗?
【解决方案2】:

好的,您需要将闹钟设置为下次 5:59:00 时响铃。 您可以通过获取当前时间来做到这一点,如果它在 5:59:00 之前,则设置闹钟,如果它在 5:59:00 之后,则添加一天并设置闹钟。这样做:

import java.util.Calendar;
import java.util.Date;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(new Panel(this));

    Date dat  = new Date();//initializes to now
    Calendar cal_alarm = Calendar.getInstance();
    Calendar cal_now = Calendar.getInstance();
    cal_now.setTime(dat);
    cal_alarm.setTime(dat);
    cal_alarm.set(Calendar.HOUR_OF_DAY,5);//set the alarm time
    cal_alarm.set(Calendar.MINUTE, 59);
    cal_alarm.set(Calendar.SECOND,0);
    if(cal_alarm.before(cal_now)){//if its in the past increment
        cal_alarm.add(Calendar.DATE,1);
    }
    //SET YOUR AlarmManager here

}

我想给你一个可构建的例子,但我还不完全理解警报管理器,所以这就是你所拥有的。基于 Eclipse 3.5.2 和 ADK 15

【讨论】:

  • 是的,克里斯,这是我的问题,如果时间过去了,就会触发警报。如何解决?我应该怎么做?
  • 获取当前时间,然后找出到第二天 5:59:00 需要经过多少毫秒。我会看看我能不能在这里得到一些编码。
  • 我使用 System.currentTimeMillis() 获取当前时间,而我使用 time.getTimeInMillis() 获取日历中的时间你的意思是这样做:alarmManager.set(AlarmManager.RTC, System.getTimeInMillis()+ (Systrm.getTimeInMillis - time.getTimeInMillis()),pendingIntent);
  • cd.add(Calendar.DATE,1);这个重量会加?
  • @israa 如果我不得不猜测,我说你使用的是 java.sql.Date 而不是 java.util.Date
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多