Broadcast开始时触发Broadcastreceiver

时间:2013-02-16 17:44:20

标签: android broadcastreceiver alarmmanager

我将时钟闹钟设置为午夜。但设置闹钟会触发我的广播接收器? 我在应用程序启动时设置了警报。 代码:

    //set the alarm
    protected void onCreate(Bundle savedInstanceState) {
            as=new AlarmSetter();
            as.SetAlarma(this); .........

    //the AlarmSetter
    public class AlarmSetter  {

        public void SetAlarma(Context context){

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR, 0);
        calendar.set(Calendar.AM_PM, Calendar.AM); 

         Intent intent = new Intent(context, AlarmKicked.class);
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1333333, intent, PendingIntent.FLAG_UPDATE_CURRENT);
         AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,
                 pendingIntent);
        }

    }


    //and my Broadcast reciever 
    public class AlarmKicked extends BroadcastReceiver{



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

            NotificationsA.Notizer(context);

            System.out.println("IT IS MIDNIGHT! SETTING TIMER..");

        }

    }

//Manifest
<receiver android:name=".AlarmKicked" android:process=":remote"/>

当我启动App时,我设置了Allarm ..但同时我进入Logcat:它是午夜!设置定时器.. 什么在开始时触发我的Broadcastreciever?

编辑:

作品:

public void SetAlarma(Context context){

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.HOUR, 0);
    calendar.add(Calendar.DAY_OF_MONTH, 1);
    calendar.set(Calendar.AM_PM, Calendar.AM); 

谢谢A - C!

1 个答案:

答案 0 :(得分:1)

您正在设置为午夜,但是您的日历时间现在已经过去了当天的午夜。

这会导致闹钟在注册后立即关闭。

引用documenatiation

  

如果过去发生时间,将立即触发警报,警报计数取决于过去触发时间相对于重复间隔的距离。

相反,请在日历中添加一天,以防止其停止。

Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR, 0);
        calendar.set(Calendar.AM_PM, Calendar.AM); 
        calendar.add(Calendar.DATE, 1);