设置闹钟在启动时间在每天的特定时间



我已经在android启动完成时启动了上午9:00的闹钟。但开机完成后每分钟报警一次。

我的要求是它应该在启动后设置警报,但只在上午9点设置火灾警报。

下面是我的代码:公共类alarmmutil {private PendingIntent;
public static void setAlarm(Context context) {
    AlarmManager alarmManager = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);
    calendar.set(Calendar.SECOND, 00);
    calendar.set(Calendar.AM_PM, Calendar.AM);
    //calendar.setTimeInMillis(calendar.getTimeInMillis());
    calendar.add(Calendar.SECOND, 1);
    Intent intent = new Intent(context, Services.class);
    PendingIntent pintent = PendingIntent.getService(context, 123456789,
            intent, 0);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);
}
}
public class AlarmBroadcastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
        Toast.makeText(context, "Booted!", Toast.LENGTH_SHORT).show();
        AlarmUtil.setAlarm(context);
    }
}
}

services (My service Class)

public class Services extends IntentService {
public Services(String name) {
    super("services");
    // TODO Auto-generated constructor stub
}
public Services() {
    super("services");
    // TODO Auto-generated constructor stub
}
@Override
public void onCreate() {
    super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    MyApp.counter += 1;
    Toast.makeText(getApplicationContext(),
            "Service started: " + MyApp.counter, Toast.LENGTH_LONG).show();
    return START_STICKY;
}
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}
@Override
protected void onHandleIntent(Intent intent) {
    Toast.makeText(getApplicationContext(), "handling intent",
            Toast.LENGTH_LONG).show();
}

}

我所欠缺的地方。请帮帮我。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
        calendar.getTimeInMillis(), 1 * 60 * 1000, pintent);

通过调用setRepeating(),您指示它每分钟触发一次意图。您可能想用set()setExact()代替。

另外,您将闹钟设置为当前日期的9:00 。我不太确定你的目标是什么,但如果你想要一个"下一个9点"的闹钟(即作为闹钟),你可能应该在当前时间大于9点时添加一天。来自文档:

如果设置的触发时间已经过去,则会触发告警立即.

EDIT:如果您需要的是在每天9:00触发此警报,则setRepeating()是正确的,但以毫秒为单位的时间应该是AlarmManager.INTERVAL_DAY。不过,要注意关于过去警报的说明。如果你在上午10点启动手机,并且使用当前代码,除了未来的警报外,你还会收到一个即时警报。

并且,正如@DerGolem指出的那样,如果您的目标是API级别19,那么这些警报将是不准确的(并且没有setRepeatingExact())。如果您需要精确的警报,那么您必须使用setExact()安排一个警报,然后在该警报触发时安排下一个警报,依此类推。

你好,我使用了下面的代码,能够在每天早上9点生成闹钟

alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmService.class);
    PendingIntent pintent = PendingIntent.getService(this, 123456789,
            intent, 0);
    // Set the alarm to start at 8:30 a.m.
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 00);

    alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(), 1000 * 60 * 1 * 60 * 24, pintent);

需要将"1 * 60 * 1000"替换为AlarmManager。

相关内容

  • 没有找到相关文章

最新更新