Android:即使我的应用程序关闭,如何安排将被调用的alarmmanager广播事件?

时间:2012-05-30 14:27:45

标签: android service alarmmanager

我的应用需要每小时执行一次特定任务。应用程序运行,暂停甚至关闭都无关紧要。

当app正在运行或暂停时,我可以通过安排AlarmManager broadcastreceiver来实现。但是当应用程序关闭时,我必须调用" unregisterReceiver"不泄漏意图,应用程序将永远不会被唤醒(或某事)来处理任务。

然后,问题是:如何安排我不需要取消注册的警报管理员任务,因此即使我的申请被关闭也会被调用?

2 个答案:

答案 0 :(得分:3)

使用AlarmManager.setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)。将类型设置为AlarmManager.RTC_WAKEUP以确保设备在睡眠时被唤醒(如果这是您的要求)。

这样的事情:

    Intent intent = new Intent("com.foo.android.MY_TIMER");
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
    long now = System.currentTimeMillis();
    long interval = 60 * 60 * 1000; // 1 hour
    manager.setRepeating(AlarmManager.RTC_WAKEUP, now + interval, interval,
        pendingIntent); // Schedule timer for one hour from now and every hour after that

您将PendingIntent传递给此方法。您无需担心泄漏意图。

请记住,当您不再需要时,请致电AlarmManager.cancel()来关闭闹钟。

请勿在代码中注册Receiver。只需将<intent-filter>标记添加到BroadcastReceiver的清单条目中,如下所示:

    <receiver android:name=".MyReceiver">
        <intent-filter>
            <action
                    android:name="com.foo.android.MY_TIMER"/>
        </intent-filter>
    </receiver>

答案 1 :(得分:0)

您需要为此设置一个名为Service的Android组件。从服务代码中,您可以使用带有PendingIntent Class的AlarmManager每小时安排任务。当您的AlarmManger在服务组件中声明时,它不需要任何GUI,并且将在后台执行,直到您的设备中有电池为止。