0

やあ、

次のコードスニペットを使用して、AlarmManagerを使用して遅延後にアクションを呼び出します。ただし、アラームはすぐに呼び出されます。

AlarmUtility.java

public void setAlarm(Context context) {
    AlarmManager am = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);    
    am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600,
            1000 *24*3600, pi); // Millisec * Second * Minute
    } // trying to first trigger the alarm after 24 hrs and repeat after 24 hours

私のエラーを教えてください

4

3 に答える 3

0

1000 *24*3600間違いなく過去であるため、アラームはすぐにトリガーされます:

過去の時間が発生した場合、アラームはすぐにトリガーされます。アラームカウントは、過去のトリガー時間が繰り返し間隔に対してどれだけ離れているかに応じて異なります。

代わりに、現在の時刻を取得してから、最初のウェイクアップに24時間を追加します。

Calendar calendar =  Calendar.getInstance();
calendar.add (Calendar.DATE,1);
long day = 1000 *24*3600;

am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), day , pi);
于 2013-02-23T15:44:41.430 に答える
0

uは次のように使用する必要があります:

am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time, time, pi);

を使用したい場合は1000 *24*3600、を使用して(1000 *24*3600)Lください。1000 *24*3600より大きいためInteger.Max_value

于 2013-02-23T15:48:10.687 に答える
0

一見すると、問題は

am.setRepeating(AlarmManager.RTC_WAKEUP, 1000 *24*3600,
        1000 *24*3600, pi); 

2番目のパラメーターtriggerAtTimeは、アラームが鳴る時刻を指している必要があります。時間間隔であってはなりません。

以下のサンプルを確認してください。

    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000 *24*3600,
        1000 *24*3600, pi); 
于 2013-02-23T15:48:12.137 に答える