2011-08-15 73 views
0

我有一个应用程序,我希望它每隔x天(由用户预先定义)启动通知。对于我正在使用此代码: 类扩展广播接收器:计划通知未触发

public class OnAlarmReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 


     String ns = Context.NOTIFICATION_SERVICE; 
     NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); 

     int icon = R.drawable.icon; 
     CharSequence tickerText = "Votre vidange approche"; 
     long when = System.currentTimeMillis(); 

     Notification notification = new Notification(icon, tickerText, when); 


     CharSequence contentTitle = "Notification"; 
     CharSequence contentText = "Vérifier votre kilométrage"; 
     Intent notificationIntent = new Intent(context, Acceuil.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); 

     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 

     final int HELLO_ID = 1; 

     mNotificationManager.notify(HELLO_ID, notification); 
    } 

    } 

而这个功能在其他类推出这个以前的类:

public void repeating() { 
     AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i=new Intent(context, OnAlarmReceiver.class); 
     PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0); 
     mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 1800000, pi); 

    } 

我将它推出每半小时通知,但我从来没有它。 这段代码是怎么回事?

非常感谢。

回答

1

SystemClock.elapsedRealtime()意味着'现在'达到毫秒,所以有可能当它有机会运行时,triggerAtTime已经过去了(不知道AlarmManager如何处理这种情况)。尝试延迟几秒钟,看它是否正常运行:SystemClock.elapsedRealtime() + 10 * 1000

另一方面,重复间隔很大的时间间隔(如天)的警报是不可靠的:如果你处理死亡,或抛出异常,或设备重新启动,那么它的警报将被清除。一个替代方案(尽管不是100%防弹)将安排来自前一个警报的每个下一个警报,并节省它运行到共享偏好的时间。然后,每次应用程序启动时,检查下一次运行时间是否有效(即将来),以及是否不安排新的警报。

+0

有很多笔记。谢谢你的回答。对于第二点,我不会以100%来表达它。它很难编码。不是?加上我知道AlarmManager始终保持活动,尽管系统重启。 :\ – androniennn

+0

好的,但我并没有简单说明这个“诀窍”:\。如果可以的话,你可以写一些你的vue点的简单代码吗? – androniennn

+0

30分钟过去了,没有inr通知。奇怪:\ – androniennn