私はAndroid用のライブ壁紙を開発しています。設定した時間に壁紙を更新するには、AlarmManagerを使用します。ほとんどの場合、これはうまくいくが、時折私の警報は受信されない。その上に私はこの振る舞いを再現することはできません。ただランダムに起こります。私は少なくとも3つのROMを使ってこれに挑戦しました。AlarmManagerが時折アラームを発しません。
コードのためです。
mAlarmManager.set(AlarmManager.RTC_WAKEUP, time, mPendingRefreshIntent);
時間はミリ秒単位のUTC時刻である:これは私のコードは、アラームを設定することです
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);
:
私はこのPendingIntentを使用しています。アラームが意図通りに設定されているかどうかは、しばしば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アラーム)キューに存在し、その後アラームログではありません。彼らはゼロからゼロを失ったように見えます。
あなたのうちの1人が私のためにこの問題を解決できるなら、私は非常にうれしく思います。
ブロードキャスト受信機クラスを使用しているかどうか –
はい、3番目のコードブロックを参照してください。 – Thomas
私は、既存のアラームをキャンセルして新しい時刻に再作成すると、同じことが起こっています。 adb上に正しい時間が残っていることを示しますが、0になると何も起こりません。 – draksia