2

私はAndroidアプリケーションを開発しており、1時間ごとに1つのタスクを実行する必要があります。次のコードを使用します。

private static final long ALARM_PERIOD = 1000L;

public static void initAlarmManager(Context context) {

    Editor editor=PreferenceManager.getDefaultSharedPreferences(context).edit();
    editor.putBoolean(context.getString(R.string.terminate_key), true).commit();

    AlarmManager manager = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
    Intent i = new Intent(context, AlarmEventReceiver.class);
    PendingIntent receiver = PendingIntent.getBroadcast(context, 0, i, 0);
    manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime(), ALARM_PERIOD, receiver);
}

それは私にとってはうまくいきますが、私のクライアントは、タスクが1回だけ機能し、1時間は機能しないと言っています。どこで間違えたの?教えてください。ありがとうございました。

4

4 に答える 4

4

コードによると、ALARM_PERIOD は繰り返し間隔として 1000L です。したがって、アラームが 1000 ミリ秒ごとに設定されるとは思えません。

1 時間ごとに繰り返し間隔を設定している場合は、3600000L にする必要があります。また、電話を再起動すると、アラーム マネージャーは再起動しない限り機能しなくなることに注意してください。

これが私のコードです:

private void setAlarmManager() {
    Intent intent = new Intent(this, AlarmReceiver.class);
    PendingIntent sender = PendingIntent.getBroadcast(this, 2, intent, 0);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    long l = new Date().getTime();
    if (l < new Date().getTime()) {
        l += 86400000; // start at next 24 hour
    }
    am.setRepeating(AlarmManager.RTC_WAKEUP, l, 86400000, sender); // 86400000
}
于 2012-05-17T05:55:02.900 に答える
2

マニフェスト.xmlのアプリケーションタグにレシーバータグを追加しましたか
<receiver android:name=".AlarmReceiver" android:process=":remote"/>

于 2012-05-17T06:08:55.920 に答える
1

Alram-Manager の代わりにAndroid-TimerTaskを使用することをお勧めします

TimerTaskクラスは、指定された時間に実行するタスクを表します。タスクは 1 回または繰り返し実行できます。お客様の要件に最適です。

于 2012-05-17T05:45:51.027 に答える
0

setRepeating()このようにメソッドを変更してコードを変更してみてください

manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,SystemClock.elapsedRealtime(), SystemClock.elapsedRealtime()+(60*60*1000), receiver);

また

これをテストして、毎分繰り返します

manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,Calendar.getInstance().getTimeInMillis(), Calendar.getInstance().getTimeInMillis()+(1*60*1000), receiver);
于 2012-05-17T06:08:44.180 に答える