0

アプリで毎日のアラームを設定します。

すべてが正常に動作します。しかし、今私が欲しいのは、特定の期間、アラームが鳴らないようにすることです。

例: アラームを 30 分ごとに再生するように設定した場合、午前 1:00 から午前 2:00 まで無音のままにするように指定した場合、そのサイレント期間中は再生されません。

私はこのようなコードを持っています:

30 分ごとにサービスから電話がかかってきます。午前 1:00 から午前 2:00 の間は無音のままです。

以下のコードを参照してください。

Calendar currentTime = new GregorianCalendar();
    currentTime.set(Calendar.HOUR, Calendar.HOUR);
    currentTime.set(Calendar.MINUTE, Calendar.MINUTE);
    currentTime.set(Calendar.SECOND, Calendar.SECOND);
    currentTime.set(Calendar.DATE, Calendar.DATE);
    currentTime.set(Calendar.MONTH, Calendar.MONTH);

    Calendar start_time = new GregorianCalendar();
    start_time.set(Calendar.HOUR, sHour);
    start_time.set(Calendar.MINUTE, sMinute);
    start_time.set(Calendar.SECOND, Calendar.SECOND);
    start_time.set(Calendar.DATE, Calendar.DATE);
    start_time.set(Calendar.MONTH, Calendar.MONTH);

    Calendar end_time = new GregorianCalendar();
    end_time.set(Calendar.HOUR, eHour);
    end_time.set(Calendar.MINUTE, eMinute);
    end_time.set(Calendar.SECOND, Calendar.SECOND);
    end_time.set(Calendar.DATE, Calendar.DATE);
    end_time.set(Calendar.MONTH, Calendar.MONTH);




   if((!SILENCE) && (((!(start_time.getTimeInMillis() < currentTime.getTimeInMillis())) && (!(currentTime.getTimeInMillis() < end_time.getTimeInMillis()) )))){
    // Alarm will play
}
else{
// you are in Silent mode
}

では、うまくいかない間に解決策を教えてください。ここでこのコードを使用すると、「あなたはサイレントモードになっています」と常に発生します

だから、これのために私を助けてください。

ありがとう。

4

2 に答える 2

3

あなたは間違っている

currentTime.set(Calendar.HOUR, Calendar.HOUR);

この文を使用すると、時間と分を整数値に設定できます。たとえば、 Calendar.HOUR には定数値 10 があり、すべての定数に異なる固定値があり、この値をカレンダーに割り当てているため、おそらく問題が発生します。

解決

時間と分のみを設定する場合は、現在のデータ時間が自動的に考慮されるように、他のフィールドをそのままにしておきます。

Calendar currentTime = Calendar.getInstant();
currentTime.set(Calendar.HOUR, hours);
currentTime.set(Calendar.MINUTE, minuts);

これにより、カレンダーの時間と分が指定した値に設定され、日、月、年などの他の情報が現在の値に設定されます。

編集

現在の時刻をミリ秒単位で取得するという問題に直面している場合は、 を使用してSystem.currentTimeMillis();ください。

そして、ミリ秒単位で将来の時間を取得するには、カレンダーに適切な時間を設定する必要があり、その後、カレンダーからミリ秒単位で時間を取得する必要がありますcalendar.getTimeInMillis()

于 2012-04-09T10:55:51.267 に答える
1

それを試してみてください -

if((!SILENCE) && (start_time.getTimeInMillis() > System.getTimeInMillis())){
// Alarm will play
}
else{
// you are in Silent mode
}
于 2012-04-09T10:47:41.423 に答える