安卓如何同时设置多个闹钟

3

好的,让我修改一下问题并使它更容易。希望你能为我提供解决方案。这两个闹钟应该同时被安排,但这里没有发生。我甚至使用了独特的请求代码来处理待定意图。请帮助我......

//点击监听器

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);
    }
};

旧问题:
我想同时设置两个不同操作的两个闹钟。

例如,用户在2点钟设置闹钟,并将持续时间设置为15分钟。第一个闹钟应该在2点钟响起,执行函数1,第二个闹钟应该在2:15响起,因为用户指定了持续时间为15分钟,执行函数2。每天在2点钟重复执行此操作,除非用户更改时间。

我在按钮单击事件中调用这两个函数:

单击事件

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点设置闹钟

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);    
}
包含以下内容:

//添加持续时间,例如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点整,并未添加15分钟的持续时间。
请帮忙解决,我尝试了很多方法,例如在第一个闹钟触发后调用这些函数,但都无济于事。

1
这可能会有所帮助:https://dev59.com/hWw15IYBdhLWcg3wYasx - inder
7个回答

10
PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this,0, intent, 0);
你在这行代码中存在问题。如果你想要同时触发两个闹钟,那么你应该像这样做。
PendingIntent sender =       PendingIntent.getBroadcast(AlarmController.this,giveUniqueRequestIdsHere, intent, 0);

你可以发布一下获取BroadcastManager中PendingIntent的代码,其中我们可以同时触发两个不同的任务... - Jayman Jani
很好的答案,节省了我的时间。 - Binesh Kumar

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

对于您的PendingIntent.getActivity(),执行相同操作。


2

嗨,试用这个来生成请求。我自己生成的请求代码不起作用,但这一行代码对我有效。

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

0

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

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

0

看起来你在第二次调用之前忘记设置“sender2”了。

你改变了sender的值,然后将sender2作为参数放入。


0
您可以在Service类中创建一个任务数组,并在for循环中设置该数组,在for循环内部同时调用您的任务。

-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);

嗨,Yi Jiang,感谢您的回复。我已经正确设置了我的时间,并且按照我在代码中指定的时间完美地触发了闹钟。我只省略了我指定时间的代码。我无法解决的问题是,我同时设置了两个闹钟,例如第一个在2点,另一个在2:15,在单击保存按钮后立即设置。现在只有1个闹钟被触发,即2点的第一个闹钟,另一个没有触发也没有显示任何错误。当我进行调试时,logCat 显示只有1个闹钟被排队,而不是另一个。我正在使用 currentSystemTime 用于 pi。 - Umar Maniar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接