2017-01-09 9 views
1

選択した時間が既に消えたら翌日にアラームを設定するには? 私は警報を発する方法がありますが、その時間が既に終わってしまっていると、ただ今起こります。私は翌日にこのアラームを有効にするために必要です。このコードを変更するにはどうすればよいですか? 「このコードは動作しませんcuzを:アラームが今これはあなたがアラームを設定したいときのためのカレンダーのインスタンスを持っているように、ちょうどミリ秒で時刻を取得し、それを比較、かなり単純です選択した時間が既に消えたら翌日にアラームを設定する方法

Calendar calendar = Calendar.getInstance(); 
    long now = calendar.getTimeInMillis(); 
    sharedPreferences = getPreferences(MODE_PRIVATE); 

    calendar.set(Calendar.HOUR_OF_DAY, 23); 
    calendar.set(Calendar.MINUTE, 59); 
    calendar.set(Calendar.SECOND, 59); 
    calendar.set(Calendar.MILLISECOND, 999); 
    long until = calendar.getTimeInMillis(); 

    calendar.set(Calendar.HOUR_OF_DAY, sharedPreferences.getInt(SAVED_HOUR_1, selected_hour_1)); 
    calendar.set(Calendar.MINUTE, sharedPreferences.getInt(SAVED_MINUTE_1, selected_minute_1)); 
    calendar.set(Calendar.SECOND, 0); 
    calendar.set(Calendar.MILLISECOND, 0); 
    long seted = calendar.getTimeInMillis(); 

    Intent intent = new Intent(getApplicationContext(), SetVolume_1.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 23, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent); 
    } else { 
     alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, seted, AlarmManager.INTERVAL_DAY, pendingIntent); 
    } 
+0

オハイオ州...私はこれを忘れた – JerryLetehen

+0

if(seted> = now){ long left = until - now; long doit = seted + left; alarmManager.setRepeating(AlarmManager.RTC_WAKEUP、doit、AlarmManager.INTERVAL_DAY、pendingIntent); } else { alarmManager.setRepeating(AlarmManager.RTC_WAKEUP、AlarmManager.INTERVAL_DAY、pendingIntent); } – JerryLetehen

答えて

0

行きます今のところ、もしそれが大きければ、時間はまだ達成されていません。そうでなければ、同じカレンダーに1日追加するだけです。実装はかなり簡単だと思います:)。

EDIT 私は実際にあなたが必要と、それはあなたがこの問題を理解するのに役立つはずですが、あなたがそれを適応させることができ、同様の何かをしなければならなかったし、ここに私のコードです。

fun setAlarm(context: Context, interval: Long) { 
    val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager 
    val i = Intent(context, AlarmReceiver::class.java) 
    val pi = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT) //Flag Update Current FLAG_CANCEL_CURRENT 

    val prefTime = PreferenceManager.getDefaultSharedPreferences(context).getString(SettingsValues.NOTIFICATION_TIME_KEY, "1").toInt() 
    val calendar = Calendar.getInstance() 
    calendar.set(Calendar.HOUR_OF_DAY, prefTime) 
    calendar.set(Calendar.SECOND, 0) 
    calendar.set(Calendar.MINUTE, 0) 
    var time = calendar.timeInMillis 
    if (System.currentTimeMillis() > time) { 
     time = time + 24 * 60 * 60 * 1000 // Next day 
    } 
    am.setRepeating(AlarmManager.RTC_WAKEUP, 
      time , AlarmManager.INTERVAL_DAY, pi); 
    isActive = true 
} 

重要あなたは私があなたのanswearがあるはずカレンダーのインスタンスを使用しています方法を見てみてください。カレンダーの総時間(ミリ秒)の後になったら、1日を追加します。

+0

私はこのコードがうまくいかなければならないと思っています。 – JerryLetehen

+0

looko goo.gl/wWgLqY – JerryLetehen

+0

私の編集を参照してください、私はいくつかの有用なコードを追加しました –

0

次の日のためのアラームを設定するにはあなたの時間を設定するとき、あなたはこれを追加します。

calendar.set(Calendar.DATE, 1); 

やすい時間はすでにその日経過しているかどうかを確認し、場合にのみ、次の日のためにそれを設定するには

if(calendar.before(System.currentTimeMillis())){ 
calendar.set(Calendar.DATE, 1); 
} 

設定された時間は、現在の日に通過した場合にのみ、次の日にカレンダーの時間を設定します:それはこのようにそれを確認し、合格しました。

関連する問題