我正在为Android开发动态壁纸。要在设定的时间刷新墙纸,我使用AlarmManager。大多数情况下,这个工作很好,但偶尔我的警报没有收到。最重要的是,我无法复制这种行为,它只是随机发生。我已经遇到了这个至少使用3个ROM。AlarmManager偶尔不会触发闹钟
现在的代码。
我用这个的PendingIntent:
mRefreshIntent = new Intent()
.setComponent(new ComponentName(mContext, RefreshBroadcastReceiver.class))
.setAction("my.package.name.REFRESH_WALLPAPER");
mPendingRefreshIntent = PendingIntent.getBroadcast(
mContext,
0,
mRefreshIntent,
PendingIntent.FLAG_CANCEL_CURRENT);
这是我的代码设置报警:
mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, mPendingRefreshIntent);
,时间以毫秒为单位的UTC时间。我经常使用adb shell dumpsys alarm
来验证报警设置是否符合预期。
接收侧:
public class RefreshBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("DayNight", "onReceive ; " + System.currentTimeMillis());
DayNightService.refresher.refresh();
Log.d("DayNight", "onReceive done; " + System.currentTimeMillis());
}
}
关联的清单行:
<application>
...
<receiver
android:name="RefreshBroadcastReceiver">
<intent-filter>
<action android:name="my.package.name.REFRESH_WALLPAPER" />
</intent-filter>
</receiver>
...
</application>
报警这并不总是焙烧存在于队列(dumpsys报警)预先,并且不是在报警日志之后。看起来他们在T减零时“迷失”了。
如果你们其中一个能为我解决这个问题,我将非常高兴。
是否使用广播接收器类? –
是的,请参阅第三个代码块。 – Thomas
如果我取消现有的闹钟并用新的时间重新创建闹钟,我也会发生同样的情况。它在adb上显示剩余的正确时间,但一旦达到0就没有任何反应。 – draksia