0

我创建了一个小部件并使用 AlarmManager 进行更新。在我的测试中,更新时间为 1 秒。代码运行完美。如果将代码更改为未来也运行,但将日期更改为过去,则更新将停止工作。有什么解决办法吗?谢谢

PendingIntent anIntent=PendingIntent.getBroadcast(context, i, 
    new Intent(WidgetViewsFactory.REFRESH_ACTION),
    PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmMgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME, 
    System.currentTimeMillis(), 1000, anIntent);
4

1 回答 1

2

我终于解决了这个问题。解决方案是创建一个 BroadcastReceiver 来监听时间或日期的变化并生成一个新的警报。

public class DateChangeReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        for (int i = 0; i < appWidgetIds.length; i++) {
            PendingIntent anIntent = PendingIntent.getBroadcast(context, i, 
                new Intent(WidgetViewsFactory.REFRESH_ACTION),
                PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
            alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000, anIntent);
        }
    }
}

并在 AndroidManifest.xml 添加以下行:

<receiver android:name=".DateChangeReceiver">
    <intent-filter>
        <action android:name="android.intent.action.TIME_SET"/>
        <action android:name="android.intent.action.DATE_SET"/>
    </intent-filter>
</receiver>
于 2013-11-04T21:57:20.670 回答