2017-03-12 18 views
0

Android AlarmManagerを使用して毎日午前6時に通知を送信しようとしています。この通知は一度だけ機能し、他の日は機能しません。Androidでアラームマネージャーが繰り返されない

public class AlarmMsg extends WakefulBroadcastReceiver { 
// set the alarm 
public void setAlarm(Context context) { 
    alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmIntent = PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmMsg.class), 0); 

    Calendar firingCal = Calendar.getInstance(); 
    Calendar currentCal = Calendar.getInstance(); 

    firingCal.set(Calendar.HOUR, 6); // hour 
    firingCal.set(Calendar.MINUTE, 0); 
    firingCal.set(Calendar.SECOND, 0); 

    long intendedTime = firingCal.getTimeInMillis(); 
    long currentTime = currentCal.getTimeInMillis(); 

    if (intendedTime >= currentTime) { 
     // set from today 
     alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent); 
    } else { 
     // set from next day 
     firingCal.add(Calendar.DAY_OF_MONTH, 1); 
     intendedTime = firingCal.getTimeInMillis(); 

     alarmManager.setRepeating(AlarmManager.RTC, intendedTime, AlarmManager.INTERVAL_DAY, alarmIntent); 
    } 
} 

と通知を作成します。

@Override 
    public void onReceive(Context context, Intent intent) { 
    // notification builder 
} 

をし、私のメインの活動で、私はちょうどこのようsetAlarmを呼び出す:

new AlarmMsg().setAlarm(getApplicationContext()); 

これは6時に通知を示していますが、それは1つだけを示してい次の日間は繰り返されません。毎日午前6時に通知が表示されます。何か案は?

+0

onReceiveで[wake lock](https://developer.android.com/reference/android/os/PowerManager.WakeLock.html)を取得します。 – shadygoneinsane

答えて

0

アラームが1回受信された場合、適切なトラックが表示されているので、AlarmManager.RTC_WAKEUPアラームタイプを使用することを忘れないでください。デバイスが消灯するとデバイスは起動します。また、アラームが重要でない場合は、setInexactRepeatingの使用を検討してください。

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
     AlarmManager.INTERVAL_DAY, alarmIntent); 
関連する問題