android同时设置多个警报

时间:2011-04-05 09:44:54

标签: android alarmmanager

好的,让我修改问题并使其更容易。我希望你能为我找到解决方案。两个警报应该同时安排,这不会发生在这里。我甚至使用唯一的请求代码来处理待处理的意图。 请帮助我.....

  

//单击“侦听器”

private OnClickListener mOneShotListener = new OnClickListener() {
    public void onClick(View v) {

        Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0);
        //I even tried sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, PendinIntent.FLAG_UPDATE_CURRENT);


        //the alarm to go off 30 seconds from now.

        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.add(Calendar.SECOND, 30);

        // Schedule the alarm!

        AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);

        //adds 2 minutes to the time

        calendar.add(Calendar.MINUTE, 2);

        sender = PendingIntent.getBroadcast(AlarmController.this,1, intent,0);
        am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender2);
    }
};

OLD问题:
我想同时设置两个警报,以便执行两个不同的操作。

对于Eg。用户以2'O时钟设置闹钟并将持续时间设置为15分钟。第一个警报应以2'O时钟触发,执行功能1,第二个警报应在2:15触发,因为用户指定持续时间为15分钟,执行功能2。除非用户更改时间,否则应每天以2'O时钟重复此操作。

我在按钮点击时调用这两个功能:

  

点击活动

saveButton.setOnClickListener(new View.OnClickListener() {  
    public void onClick(View view) {  
        ..........  
        ..........  
        new ReminderManager(this).setReminder(mRowId, mCalendar);  
        new ReminderManager(this).wakeReminder(mRowId, mCalendar, duration);  
        }  
    }

setReminder包含

  

//以2'O时钟设置闹钟

public void setReminder(Long taskId, Calendar when, String duration){  
    Intent i = new Intent(mContext, OnAlarmReceiver.class);
    i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId);    
    PendingIntent pi = PendingIntent.getBroadcast(mContext,(int)System.currentTimeMillis(), i, PendingIntent.FLAG_UPDATE_CURRENT);    
    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);    
}

wakeReminder包含

  

//增加持续时间,即15分钟

public void wakeReminder(Long taskId, Calendar when, String duration){
    Intent i = new Intent(mContext, OnAlarmReceiverWake.class);
    i.putExtra(RemindersDbAdapter.KEY_ROWID, (long)taskId);
        Long d = Long.parseLong(duration);
        Long mins = d*60*100; 
        Long milli = when.getTimeInMillis() + mins;
        PendingIntent  pi = PendingIntent.getBroadcast(mContext, (int)System.currentTimeMillis(), i, PendingIntent.FLAG_UPDATE_CURRENT);
        mAlarmManager.set(AlarmManager.RTC_WAKEUP, milli, pi);
}

我注意到,只要mAlarmManager.set();成功执行,LogCat就会显示通知 "enqueueToast pkg=com.jellboi.android.togglemode callback=android.app ITransientNotification$stub$proxy@43c0c5f8 duration=0"

但是当我同时设置两个警报时,执行mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);时不会显示通知 但是执行mAlarmManager.set(AlarmManager.RTC_WAKEUP, milli, pi);时会显示通知。此外,通知设置为原始时间,即2'O时钟,而不是在其持续时间增加15分钟后。

请帮助,我尝试了很多方法在不同的地方调用此功能,例如在第一次警报被触发后但都是徒劳的。

6 个答案:

答案 0 :(得分:8)

PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0);

这行有问题。如果你想同时发射两个警报,你应该做这样的事情

PendingIntent sender =       PendingIntent.getBroadcast(AlarmController.this,giveUniqueRequestIdsHere, intent, 0);

答案 1 :(得分:4)

sender = PendingIntent.getBroadcast(this, (int) System.currentTimeMillis(), i, PendingIntent.FLAG_ONE_SHOT);

对PendingIntent.getActivity();

执行相同的操作

答案 2 :(得分:2)

您好尝试使用此生成请求我正在生成我自己的请求代码,但这行适用于我

final int intent_id = (int) System.currentTimeMillis();

答案 3 :(得分:0)

启动新的OneShotAlarm.class时,必须设计启动模式。如果第一个实例仍然存在,默认设置将忽略第二次启动。

Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);
intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

答案 4 :(得分:0)

您似乎忘了在第二次通话前设置“sender2”。

您更改发件人的值,然后将sender2作为参数。

答案 5 :(得分:-1)

试试这个:

Calendar cal = new GregorianCalendar();
Date date = cal.getTime();
cal.clear();

Cursor c = database.query(mArray.get(mPosition), new String[]{"days"},"days"+"!="+0, null, null, null, null);
cal.set(Calendar.YEAR,2011);
cal.set(Calendar.MONTH,date.getMonth());
cal.set(Calendar.DAY_OF_MONTH,date.getDate());
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, min);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(nextScreen.this, AlaramReciver.class);
i.putExtra("Start",mArray.get(mPosition));

Editor medit = getSharedPreferences("Start", 0).edit();
medit.putString("Start", mArray.get(mPosition));medit.commit();

PendingIntent pendingintent = PendingIntent.getBroadcast(this,mPosition, i, 0);
mgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingintent);

您已设置为这样的时间,一旦您在闹钟管理器中设置时间,它将自动每天调用这些功能。对pendingintent使用不同的请求代码。

如果你想要第二个电话功能。您只需在

中的15分钟内添加时间
cal.set(Calender.MINUTE,min+15);