2012-09-28 63 views
0

我在使用setRepeating()设置闹钟时遇到问题。Android中的AlarmManager.setRepeating()未设置闹钟

Intent i = new Intent(context, OnAlarmReceiver.class); 
i.putExtra("id", storable.getId()); 
PendingIntent pi = PendingIntent.getBroadcast(context, storable.getId(), i, PendingIntent.FLAG_UPDATE_CURRENT); 

mgr.setRepeating(AlarmManager.RTC_WAKEUP, storable.getObject().getTimeOnDay(Calendar.FRIDAY), Event.MILLISECONDS_IN_A_DAY*7, pi); 
Calendar c = Calendar.getInstance(); 
c.setTimeInMillis(storable.getObject().getTimeOnDay(Calendar.FRIDAY)); 
Log.v("ACTUALLY SCHEDULED ON FRIDAY", c.getTime().toString()); 

logcat的规定:2月9日至28日:17:58.535:V /实际调度星期五(32494):星期五10月5 1点43分○○秒EDT 2012

这是正确的时候,我调度。但是,我的警报不会触发。关于可能导致这种情况的唯一线索是,当我使用调试器进入方法时,被调用的方法之一是Parcel.readException()。我不知道这意味着什么,或者它甚至是非常重要的。有人知道可能会发生什么吗?

+0

嗨,显示您的OnAlarmReceiver类OnAlarmReceiver扩展广播接收器 – vandzi

+0

公共类{ \t @覆盖 \t公共无效的onReceive(上下文语境,意图意图){// 做一些工作 }} 我很抱歉,我无法正确缩进:/你需要更多吗? –

+0

这永远不会被调用。如果不明确。 –

回答

0

请参阅this链接。汤姆和CommonsWare也提出了相当好的答案。

编辑:

看看这有助于:

Intent myIntent = new Intent(context, OnAlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeInMillis(System.currentTimeMillis()); 
    calendar.add(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60, pendingIntent); 
+0

这是我用来构建这段代码的代码,除了我使用系统时间而不是使用时间之外,它几乎完全相同,所以我的第一个标志参数是不同的。 –

+0

查看我的更新代码...使用calendar.add并尝试它是否工作.. –

+0

此代码与实现的代码(Calendar.add()在getTimeOnDay()中完成)几乎完全相同。)时间是正确的我从日志中获得肯定。 –

0

我找到了答案。此方法被多次调用,并使用PendingIntent中storable.getId()的相同值。它覆盖了旧的PendingIntent并安排了另一个我没有等的东西。感谢那些帮助过你的人。

+0

很高兴你想出了一个解决方案! –