2011-08-15 22 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

大きな間隔(日数など)のアラームを繰り返すことは信頼できません。処理が強制終了された場合や例外がスローされた場合、またはデバイスが再起動された場合、アラームはクリアされます。 1つの代替方法(100%防弾ではないが)は、前のアラームからの各次のアラームをスケジュールし、それが実行される時間を例えば共有設定に保存することである。その後、アプリケーションが起動するたびに、次の実行時間が有効(つまり、将来)であるかどうかを確認し、新しいアラームをスケジュールしない場合はチェックします。

+0

多くの注意が必要です。ご回答ありがとうございます。 2番目のポイントについては、私はそれを100%で強調していません。それをコード化するのは難しいです。いいえ?私が知っているように、AlarmManagerはシステムの再起動にもかかわらず常にアクティブのままです。 :\ – androniennn

+0

さて、しかし、私は "トリック"を誇張していません:\。可能であれば、あなたのvueのポイントのサンプルコードを書くことができますか? – androniennn

+0

30分が経過し、通知がない。 Strange:\ – androniennn

関連する問題