Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置多个警报时出现问题?_Android_Android Alarms_Android Broadcast - Fatal编程技术网

Android 设置多个警报时出现问题?

Android 设置多个警报时出现问题?,android,android-alarms,android-broadcast,Android,Android Alarms,Android Broadcast,我正在尝试使用广播接收器设置多重警报。我每1分30秒设置两个警报的重复,但当我收到警报时,两个警报同时重复 我是这样做的: if(repeat.equals("No Repeat")){ bcr.CancelAlarm(getApplicationContext()); } else if(repeat.equals("After 10 Minutes")) {

我正在尝试使用广播接收器设置多重警报。我每1分30秒设置两个警报的重复,但当我收到警报时,两个警报同时重复

我是这样做的:

if(repeat.equals("No Repeat")){
                    bcr.CancelAlarm(getApplicationContext());
                }
                else if(repeat.equals("After 10 Minutes")) {
                    bcr.TenMintAlarm(getApplicationContext(), hour, minute, dueDate,task_note,Tasks_ID);
                }
                else if(repeat.equals("After 15 Minutes")){
                    bcr.FifteenMintAlarm(getApplicationContext(), hour, minute, dueDate,task_note,Tasks_ID);
                }
                else if(repeat.equals("After n Minutes")){
                    bcr.nMintAlarm(getApplicationContext(), hour, minute, dueDate,task_note,Tasks_ID);
                }
广播接收机:

public void CancelAlarm(Context context)
{
    Intent intent = new Intent(context, AlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}
public void TenMintAlarm(Context context,int hour,int minutes, String duedate,String task_note,int task_id) 
{
    AlarmManager Alarm1 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra("NOTE", note);
    intent.putExtra("ID", task_id);
    int mUniqID = task_id+2;
    PendingIntent recurringAlarm = PendingIntent.getBroadcast(context, mUniqID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    System.out.println("mUniqID-----" +mUniqID);
    Alarm1.setRepeating(AlarmManager.RTC_WAKEUP, _alarm, 1000 * 60, recurringAlarm);
}
public void FifteenMintAlarm(Context context, int hour,int minutes, String duedate, String task_note, int task_id)
{
    AlarmManager Alarm2 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmReceiver.class);
    i.putExtra("NOTE", note);
    i.putExtra("ID", task_id);
    int uniqID = task_id+2;
    System.out.println("mUniqID-----" +uniqID);
    PendingIntent Alarm = PendingIntent.getBroadcast(context, uniqID, i, PendingIntent.FLAG_UPDATE_CURRENT);
    Alarm2.setRepeating(AlarmManager.RTC_WAKEUP, _alarm, 1000 * 30, Alarm);
}

但当收到警报时,它是在同一时间重复,而不是我希望一个警报在1分钟后重复,在30秒后重复。任何建议都可能有帮助。谢谢。

根据您的else if块,根据您指定的条件,只会设置一个警报。如果要设置2个报警,则应将它们放在同一块或其他地方。

您需要为
挂起的意图使用不同的id<您在两个函数中使用的code>mUniqID
uniqID
相等,使
broadcastReceiver
认为它与另一个相同,因此它们同时触发。只需将它们设置为不同的数字

public void TenMintAlarm(Context context,int hour,int minutes, String duedate,String task_note,int task_id) 
{
    AlarmManager Alarm1 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    intent.putExtra("NOTE", note);
    intent.putExtra("ID", task_id);
    int mUniqID = 20;//change in here
    PendingIntent recurringAlarm = PendingIntent.getBroadcast(context, mUniqID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    System.out.println("mUniqID-----" +mUniqID);
    Alarm1.setRepeating(AlarmManager.RTC_WAKEUP, _alarm, 1000 * 60, recurringAlarm);
}
public void FifteenMintAlarm(Context context, int hour,int minutes, String duedate, String task_note, int task_id)
{
    AlarmManager Alarm2 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmReceiver.class);
    i.putExtra("NOTE", note);
    i.putExtra("ID", task_id);
    int uniqID = 10;//change in here
    System.out.println("mUniqID-----" +uniqID);
    PendingIntent Alarm = PendingIntent.getBroadcast(context, uniqID, i, PendingIntent.FLAG_UPDATE_CURRENT);
    Alarm2.setRepeating(AlarmManager.RTC_WAKEUP, _alarm, 1000 * 30, Alarm); 
}

您确定调用的bot警报吗?恐怕您在
pendingent
中的两个警报ID总是相同的,因此会覆盖另一个警报。如果要有多个报警,请首先检查ID是否不同。@AM,是,我按时收到两个报警,但问题是两个报警都在同一时间重复,但我有两个不同的值,一个是4个30秒,另一个是1分钟。但这两个都在1分钟后重复。@antimo I已传递任务id,因此任务id在两个不同警报的挂起意图中总是不同的。我可以看到他们都收到了不同的ID。你能告诉我如何克服这个问题吗?我收到了展位警报,但它同时在重复。如果你有任何建议,请告诉我。