2

我一直在开发一个 Android 应用程序,我需要每小时执行 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 毫秒设置一次。

如果您设置每小时的重复间隔,则应为 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

您是否在 manifest.xml 的应用程序标记中添加了接收器标记
<receiver android:name=".AlarmReceiver" android:process=":remote"/>

于 2012-05-17T06:08:55.920 回答
1

我建议您使用Android-TimerTask而不是 Alram-Manager

该类TimerTask表示要在指定时间运行的任务。该任务可以运行一次或重复运行。它非常适合您的要求。

于 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 回答