web-dev-qa-db-ja.com

android

誰かが曜日の繰り返しアラームを設定するための良いロジックを与えることができますか?私は使用して毎週のアラームを行いました

            alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
            alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
            alarmCalendar.set(Calendar.SECOND, 0);
            alarmCalendar.set(Calendar.AM_PM, amorpm);

            Long alarmTime = alarmCalendar.getTimeInMillis();

Intent intent = new Intent(Alarm.this, AlarmReciever.class);
                intent.putExtra("keyValue", key);
                PendingIntent pi = PendingIntent.getBroadcast(Alarm.this, key, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 7*1440*60000 , pi); 

アラームは時間どおりにトリガーされ、7日後に自動的にトリガーされます。

しかし、私の要件は、単に7日ではなく日を選択することです。

毎週月曜日、火曜日、木曜日の午前9時など-アラームは自動的にトリガーされます。 setRepeatingでこれを行うにはどうすればよいですか。

誰かがこれを手伝ってくれる?

ありがとう!

14
TheDevMan

これらの質問はあなたが望むものと同じことについて話します。それらの答えは役に立ちます:

開始する日を指定し、7日ごとに繰り返すだけです。与えられた質問に対する回答で指定されたいくつかの方法があります:

アラームマネージャーを使用して、平日に繰り返しアラームを取得するにはどうすればよいですか?

特定の曜日のAndroid通知が直接オフになります

Androidで平日にアラームを繰り返す方法

更新:

あなたのコメントで

SetRepeatingでtriggerAtMillisパーツを設定する方法。たとえば、今日が火曜日であるとすると、毎週月曜日、水曜日、金曜日を選択します。 -水曜日に何を入れますか?

今日が火曜日である場合、アラームを設定する方法として、水曜日が繰り返されると言うことを理解しましたか?まず第一に、マルチプルIDを使用して、毎日個別にアラームを設定できます。

次に、既存のコードにalarmCalendar.set(Calendar.DAY_OF_WEEK, week);行を追加できます。曜日(1〜7)に基づいて、その日に繰り返されます。これをパラメーターとして関数に渡すことができます。お気に入り:

    setAlarm(2); //set the alarm for this day of the week

    public void setAlarm(int dayOfWeek) {
        // Add this day of the week line to your existing code
        alarmCalendar.set(Calendar.DAY_OF_WEEK, dayOfWeek);

        alarmCalendar.set(Calendar.HOUR, AlarmHrsInInt);
        alarmCalendar.set(Calendar.MINUTE, AlarmMinsInInt);
        alarmCalendar.set(Calendar.SECOND, 0);
        alarmCalendar.set(Calendar.AM_PM, amorpm);

        Long alarmTime = alarmCalendar.getTimeInMillis();
        //Also change the time to 24 hours.
        am.setRepeating(AlarmManager.RTC_WAKEUP, alarmTime, 24 * 60 * 60 * 1000 , pi); 
}

上記の質問の1つから例を挙げました。もっと明確になってほしい。

15
Shobhit Puri
Intent intent1 = new Intent(getApplicationContext(),
                            NotificationReceiver.class);
PendingIntent pendingIntent1 = PendingIntent.getBroadcast(getApplicationContext(),
                                                          1,
                                                          intent1,
                                                          PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
Java.util.Calendar calendar1 = Java.util.Calendar.getInstance();

calendar1.set(Java.util.Calendar.DAY_OF_WEEK,
              Calendar.MONDAY);
calendar1.set(Java.util.Calendar.HOUR_OF_DAY,
              22);
calendar1.set(Java.util.Calendar.MINUTE,
              8);
calendar1.set(Java.util.Calendar.SECOND,
              0);

alarmManager1.setExact(AlarmManager.RTC, calendar1.getTimeInMillis(), pendingIntent1);
2
VIVEK GAUR
if (Monday.isChecked()) {
                        setalarm(2);
                    } else if (Tuesday.isChecked()) {
                        setalarm(3);
                    } else if (Wednesday.isChecked()) {
                        setalarm(4);
                    } else if (Thursday.isChecked()) {
                        setalarm(5);
                    } else if (Friday.isChecked()) {
                        setalarm(6);
                    } else if (Saturday.isChecked()) {
                        setalarm(7);
                    } else if (Sunday.isChecked()) {
                        setalarm(1);
                    }

public void setalarm(int weekno) {

        cal.set(Calendar.DAY_OF_WEEK, weekno);
        cal.set(Calendar.MINUTE, min);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,


     cal.getTimeInMillis(), 1 * 60 * 60 * 1000, pendingIntent);
}
2
Makvin

平日に繰り返しアラームを設定するには、以下のコードを使用します。これがお役に立てば幸いです。

        Calendar calender= Calendar.getInstance();

        calender.set(Calendar.DAY_OF_WEEK, weekNo);  //here pass week number
        calender.set(Calendar.HOUR_OF_DAY, hour);  //pass hour which you have select
        calender.set(Calendar.MINUTE, min);  //pass min which you have select
        calender.set(Calendar.SECOND, 0);
        calender.set(Calendar.MILLISECOND, 0);

        Calendar now = Calendar.getInstance();
        now.set(Calendar.SECOND, 0);
        now.set(Calendar.MILLISECOND, 0);

        if (calender.before(now)) {    //this condition is used for future reminder that means your reminder not fire for past time
            calender.add(Calendar.DATE, 7);
        }

        final int _id = (int) System.currentTimeMillis();  //this id is used to set multiple alarms

        Intent intent = new Intent(activity, YourServiceClass.class);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, _id, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calender.getTimeInMillis(), 7 * 24 * 60 * 60 * 1000, pendingIntent);
1