报警在创建后立即运行

时间:2015-04-17 15:13:58

标签: android alarmmanager

我正准备在每天晚上7点播放铃声,但是在其未决意图正在注册广播之后,它会立即播放铃声。

我在按钮点击时在前台调用了服务,并在onStartCommand中创建了待处理的意图:

@Override
public int onStartCommand(Intent intent, int flags, int startId) 
{

    startForeground(FOREGROUND_ID,
            buildForegroundNotification("DummyApp"));

    c = Calendar.getInstance();
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    int interval = 1000 * 60 * 60*24;
    c.setTimeInMillis(System.currentTimeMillis());
    c.set(Calendar.HOUR, 19);
    c.set(Calendar.MINUTE,00);
    manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
            interval, pendingIntent);
    Intent alarmIntent = new Intent(AlarmService.this, DataProcessor.class);
    pendingIntent = PendingIntent.getBroadcast(AlarmService.this, 0,
            alarmIntent, 0);
    return START_STICKY;
}

现在我在DataProcessor类接收数据处理器类的接收方法时播放铃声:

@Override
public void onReceive(Context ctx,Intent intent) {


    playRIng(ctx);

 }

但是,当我运行此代码时,单击按钮,服务已创建,但在调用AlarmService并且也播放铃声后立即触发警报。如何可能,因为我在注册广播时给出了准确的7 O时钟时间。? 谷歌搜索了很多,但只发现相同的代码,没有别的。每个代码都可以播放当时的铃声,但它也会在广播注册后立即播放铃声。

4 个答案:

答案 0 :(得分:2)

为什么不使用条件?:

@Override
public void onReceive(Context ctx,Intent intent) {
Calendar c = Calendar.getInstance(); 
 int hour = c.get(Calendar.HOUR);

if(hour==19) 
 {
    playRIng(ctx);
 }

 }

答案 1 :(得分:2)

如果你在晚上9点运行该代码,你会告诉AlarmManager意图应该在2小时前第一次运行。

您需要检查日历时间是否落后于当前时间 如果是,您需要在日历中添加一天,以便明天晚上7点首先触发。

这样的事可能有用:

    c = Calendar.getInstance();
    AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    int interval = 1000 * 60 * 60 * 24;
    // Not needed
    // c.setTimeInMillis(System.currentTimeMillis());
    c.set(Calendar.HOUR, 19);
    c.set(Calendar.MINUTE, 00);

    // ** Add this **
    // Check if the Calendar 7pm is in the past
    if (c.getTimeInMillis() < System.currentTimeMillis())
        c.add(Calendar.DAY_OF_YEAR, 1); // It is so tell it to run tomorrow instead

    manager.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), interval, pendingIntent);
    Intent alarmIntent = new Intent(AlarmService.this, DataProcessor.class);
    pendingIntent = PendingIntent.getBroadcast(AlarmService.this, 0, alarmIntent, 0);

答案 2 :(得分:0)

您可以在开发人员网站上尝试使用该示例,了解可用的示例代码。可能代码中存在编程错误,但可用的示例代码正是您想要的。

Scheduling Repeating Alarms

答案 3 :(得分:0)

最好的方式,玩小时&amp;分钟的车

注意:请检查您的时间格式。在我的情况下,它是24小时甲酸盐

示例:

     Calendar c = Calendar.getInstance();
   //for 12 hr formate user int hour = c.get(Calendar.HOUR);
    int hour = c.get(Calendar.HOUR_OF_DAY);
    int minute = c.get(Calendar.MINUTE);
    //Log.e("time",""+hour+":"+minute);

    if (hour == 10 && minute == 0 ) {

     }