TIMEZONE_CHANGED アクションで BroadcastReceiver を使用して、AlarmManager を使用してアラームをリセットし、タイム ゾーンの変更に応じて、数時間前後ではなく、設定した時刻にアラームが正確に実行されるようにします。
ただし、ユーザーから送信された最新のログで、TIMEZONE_CHANGED アクションのインテントに関する情報が数秒ごとに受信され、ユーザーがアプリの不具合について不満を漏らしているのを見ました。
これが私のBroadcastReceiverのonReceiveコードです
@Override
public void onReceive(Context context, Intent intent) {
Utils.log("OnTimeChange");
String action = intent.getAction();
if (action.equals(Intent.ACTION_TIME_CHANGED)) {
Utils.log("TimeChange");
} else if (action.equals(Intent.ACTION_TIMEZONE_CHANGED)) {
Utils.log("TimeZoneChanged");
}
BroadcastsManager.updateBroadcastsFromAlarms(context,
AlarmsDbAdapter.getInstance(context));
}
マニフェストのインテント フィルター:
<intent-filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.TIME_SET" />
</intent-filter>
ログの一部 (1 時間以上続く - ログ全体)
1. 19/4 7:41:54 - posting alarm 3 for 8:15 (in 0h)
2. 19/4 7:44:29 - OnTimeChange
3. 19/4 7:44:29 - TimeZoneChanged
4. 19/4 7:44:29 - posting alarm 3 for 8:15 (in 0h)
5. 19/4 7:44:54 - OnTimeChange
6. 19/4 7:44:54 - TimeChange
7. 19/4 7:44:54 - posting alarm 3 for 8:15 (in 0h)
Samsung Galaxy S III (Android v 4.1.2) です。奇妙なことに、それは私の S III では起こりません。ユーザーがデバイスで「プロバイダーによる自動タイムゾーン変更」オプションを有効に設定していて、そのような情報が数秒ごとに送信されている可能性がありますか?
経験した人いますか?ブロードキャストを更新する前にタイムゾーンが実際に変更されたかどうかを確認するオプションを追加するだけだと思いますが、それでも数秒ごとに受信機が呼び出されます...