2016-04-05 9 views
1

リマインダーが正しい時刻にトリガーされず、デバイスを再起動したときにのみトリガーされます。リマインダーが正しい時刻にトリガーされない

リマインダを作成した日、私は正しい日にそれを取得していましたが、それ以降はデバイスを再起動したときにのみ起動します(正しい時間ではありません)。

を毎月トリガするために、毎日の毎週をトリガするために、3日ごとに第四トリガする第三、すべての2日にトリガする2番目と5番目のトリガするために1しかし、私たび -

などが、私は5つのアラームを作成しました私のデバイスを再起動します(私のデバイスを再起動した場合:05:00、それらはすべて同時にトリガーします)。アイドロップが12:15にトリガーすることを期待していましたが、Cyripが13: 2日おきに20回など。

AlarmReceiver.java:あなた(再)日付がであるまでは、リピート間隔を追加することで、日付を調整する必要があります(ブート受信機で例えば)アラームを作成

public void setRepeatAlarm(Context context, Calendar calendar, int ID, long RepeatTime) { 
    mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

    // Put Reminder ID in Intent Extra 
    Intent intent = new Intent(context, AlarmReceiver.class); 
    intent.putExtra(ReminderEditActivity.EXTRA_REMINDER_ID, Integer.toString(ID)); 
    mPendingIntent = PendingIntent.getBroadcast(context, ID, intent, PendingIntent.FLAG_CANCEL_CURRENT); 

    // Calculate notification timein 
    Calendar c = Calendar.getInstance(); 
    long currentTime = c.getTimeInMillis(); 
    long diffTime = calendar.getTimeInMillis() - currentTime; 

    // Start alarm using initial notification time and repeat interval time 
    mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
      SystemClock.elapsedRealtime() + diffTime, 
      RepeatTime , mPendingIntent); 

    // Restart alarm if device is rebooted 
    ComponentName receiver = new ComponentName(context, BootReceiver.class); 
    PackageManager pm = context.getPackageManager(); 
    pm.setComponentEnabledSetting(receiver, 
      PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 
      PackageManager.DONT_KILL_APP); 
} 
+0

がmPendingIntent = PendingIntent.getBroadcast(文脈、ID、意図、PendingIntent.FLAG_CANCEL_CURRENT)から、あなたのIDを確認してください。あなたは他のアラームを上書きし、1だけを設定するかもしれません。古いアラームを設定した場合、他のアラームを妨げるべきではありませんが、あなたが設定したIDは – Tazz

答えて

2

未来。

現在、同じパラメータでアラームを再作成しています。最初のトリガ時間に達するまで動作します。その後、再起動するたびにアラームマネージャに過去の日付が表示されるため、アラームがすぐにトリガされます。 setRepeatAlarm()

たとえば、あなたはできます:

編集

// Calculate notification timein 
... 
long diffTime = ... 

// ensure the next alarm is in the future 
while(diffTime < 0) { 
    diffTime += RepeatTime; 
} 
+0

ええ、あなたは正しいと思います....しかし、私はこれを制御して、リマインダのトリガを時間通りに得ることができますか? – Sun

+0

最後に私のsetRepeatAlarm()メソッドは、上記のようになります。更新されたセクション – Sun

+0

を参照してください。また、繰り返しアラームがない場合は、 'diffTime'が負の場合は再作成しないでください。 – bwt

関連する問題