0

設定した日から毎週通知を行いたいです。呼び出されたときに初期化されますが、2回目は初期化されません(電話の時計を早送りして、呼び出すかどうかを確認しましたが、呼び出しませんでした)。7*calendar.getTimeInMillis() でなければなりません。毎週に設定するには、他にどのようにすればよいでしょうか。

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, mHour);
        calendar.set(Calendar.MINUTE, mMinute);
        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, OnBootReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        //am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7*calendar.getTimeInMillis(), pendingIntent);

BroadCastReceiver クラス:

    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence from = "from";
CharSequence message = "message";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
Notification notif = new Notification(icon, tickerText, when);
notif.setLatestEventInfo(context, from, message, contentIntent);
nm.notify(1, notif);
4

2 に答える 2

1

1970年以降の時間を返すため、これは実際に問題であるため、基本的に繰り返しを〜42.5 7*calendar.getTimeInMillis()* 7年後に設定します。7 (日) * 24 (時間) * 60 (分) * 60 (秒) * 1000 (ミリ)などのオフセットを設定する必要があります。calendar.getTimeInMillis()

それをクリアした後、繰り返しの使用を避け、代わりに呼び出されたコードが作業を終了するたびに新しいアラームを設定することをお勧めします。これは、繰り返しメカニズムに問題がある可能性があるためです。

于 2012-05-11T16:38:18.987 に答える
0

必要な現在の日付 * 7 は必要ありません。

7 日 = 604 800 000 ミリ秒

これは、7 日間が何ミリ秒かということです。

すなわち

 am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 604800000L, pendingIntent);
于 2012-05-11T16:39:10.477 に答える