2

私は とBroadcastReceiverを監視android.intent.action.BOOT_COMPLETEDandroid.intent.action.TIME_SETていandroid.intent.action.TIMEZONE_CHANGEDます。

<receiver android:name="SystemBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.TIME_SET" />
            <action android:name="android.intent.action.TIMEZONE_CHANGED" />
            <category android:name="android.intent.category.HOME" />
        </intent-filter>
</receiver>

/** そうではありません。以下を参照してください。これらのアクションのいずれかが発生するたびに、レシーバーはアクティビティを開きます。時計の分の部分を変更した場合を除き、すべて正常に機能android.intent.action.TIME_SETします。これにより、アクティビティが 2 回開始されます。
時計の時間の部分を変更すると、android.intent.action.TIME_SET一度しかアクティブにならないので、奇妙だと思います。*/ 私のテスト電話は 4.2.1 の Galaxy Nexus です。これは 4.2.1 のシステム バグですか、それとも何か間違ったことをしたのでしょうか?

-----------自分で編集------------ 役に立つかもしれないいくつかのログを次に示します。分、時間、または日付を変更すると、アクティビティが 2 回起動します。

02-01 21:16:11.781: D/SystemClock(9012): Setting time of day to sec=1359724560
02-01 21:16:00.023: V/AlarmClock(8932): AlarmInitReceiver finished
02-01 21:16:00.031: D/SystemClock(9012): Setting time of day to sec=1359724560

なぜシステム設定部分で時刻を 1 回変更しただけなのかわかりませんが、システムは設定時刻を 2 回呼び出します。

4

1 に答える 1

2

自分の Nexus でこの動作を確認しました。

ただし、BroadcastReceiver からアクティビティを開始しないでください。Notificationsを使用することをお勧めします。

この方法では、通知が更新されるだけで複製されないため、ブロードキャストを 2 回取得しても問題ありません。

于 2013-03-11T11:04:18.140 に答える