4

我有一个 android setInexactRepeating 放在我的 onCreate 里面,它永远不会触发。我在其中有一个日志,以确保它实际上正在执行,并且似乎没有触发,以及我为它计划的事件。我希望它每 10 秒熄灭一次,但即使是第一次,它似乎也不会熄灭。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.d("Restart", "First");
    Intent toRun = new Intent(this, AlarmRestart.class);
    PendingIntent pendingToRun = PendingIntent.getBroadcast(this, 0, toRun, 0);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.cancel(pendingToRun); 
    am.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(), 10000L, pendingToRun);

    Log.d("Restart", "Second");
}

这是在另一个文件中:

public class AlarmRestart extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        Log.d("Restart", "Third");
    }
}

这就是“adb shell dumpsys 警报”所说的

com.packageName.restart
5715ms running, 64 wakeups
3 alarms: flg=0x14 cmp=com.packageName.restart/.AlarmRestart
61 alarms: flg=0x14 cmp=com.packageName.restart/.reciever.AlarmRestart
4

3 回答 3

8

AlarmRestart是一个BroadcastReceiver。它不是一个Service. 但是您正在尝试使用getService() PendingIntent. 那不管用。更改getService()getBroadcast(),您应该会有更好的运气。

于 2012-07-30T20:13:11.250 回答
5

我发现了问题:/

        <reciever android:name="com.appName.restart.AlarmRestart" android:enabled="true" />

它拼写为receiver....不是receiver。说真的,XML 需要一个错误检查器。我仍然将 CommonWares 的答案标记为已接受的答案,因为他解决了我以后会遇到的其他几个问题。

于 2012-07-31T22:15:23.687 回答
2

您可以在 ELAPSED_REALTIME_WAKEUP 警报中使用 SystemClock.elapsedRealtime(),而不是 System.currentTimeMillis()

于 2012-11-16T14:44:53.010 回答