2012-03-08 63 views
1

我有一个应用程序,有一个报警系统,工作flawleslesly,我复制所有5类,只是改变数据库名称,但它; s不工作,我可以通过你所有的代码,但我想听听有没有人有过这样的事情。Androids AlarmManager不会触发闹钟

当我调用新的ReminderManager(this).setReminder(mRowId,mCalendar);

rowID已满(有些数字)和mCalendar(有一个日期,我与另一个应用程序的Mcalendar的日期相比,它是相同的格式),当我打电话时,它应该createse挂起的意图

public void setReminder(Long taskId, Calendar when) 
{ 
    Intent i= new Intent(mContext,OnAlarmReciver.class); 
    i.putExtra(DatabaseIN.KEY_ROWID,(long)taskId); 


    PendingIntent pi=PendingIntent.getBroadcast(mContext,0, i, PendingIntent.FLAG_ONE_SHOT); 
    mAlarmManager.set(AlarmManager.RTC_WAKEUP,when.getTimeInMillis(),pi); 

} 
after this nothing happens... can anyone help 

回答

0

尝试清洁乌尔项目 - >干净,如果不帮助建立一个新的项目,并另起炉灶写clases ..这为我工作:d

+1

谢谢,真的帮了我 – Tony 2012-03-11 13:11:30

0

也许when还没有发生(太遥远的将来),或者它已经发生(在过去你的电话之前set())。

或者,您的清单中可能没有定义OnAlarmReceiver

+0

我有它 <活动 机器人:label =“@ string/app_name” android:name =“.AnAlarmReciver”/> Tony 2012-03-09 09:12:15

0

PendingIntent.getBroadcast将重新使用一个匹配的pendingIntent,因此它可能已经触发了该待处理的意图(例如,可能来自您复制的代码),并且由于您使用的是FLAG_ONE_SHOT标志,射击一次。

快速测试是删除FLAG_ONE_SHOT标志,看看它是否触发。如果这是问题,那么只需在PendingIntent.getBroadcast中使用不同的请求代码即可。

+0

我应该用什么来代替FLAG_ONE_SHOT? – Tony 2012-03-09 09:24:34

+0

这取决于你想要完成的事情。如果你只想在你仍然可以使用该标志的情况下触发这个意图,但是对于不同的意图,请求代码应该是不同的(现在你正在使用0,可能是多于一个警报,听起来像)。如果您实际上不需要FLAG_ONE_SHOT,则不要使用标志(即将其传递给0)。 – dule 2012-03-12 19:51:19