2

AlarmManager 通知に反応するはずの BroadcastReceiver に問題があります。この件に関するいくつかのスレッドを読みましたが、役立つものは何も見つかりませんでした。私は何かが欠けているに違いない。

次の方法でアラームを設定しました。

// Receiver intent
Intent intent = new Intent(mContext, CalendarAlarmReceiver.class);
intent.putExtra(CalendarAlarmReceiver.SHOW, show);
// Sender
PendingIntent sender = PendingIntent.getBroadcast(mContext, hashRequestCode(show), intent, PendingIntent.FLAG_UPDATE_CURRENT);
mPendingAlarmRequests.put(show.getChannel() + show.getName() + show.getStart().toGMTString(), sender);
// Get AlarmManager
AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, show.getStart().getTime(), sender);

BroadcastReceiver を拡張する CalendarAlarmReceiver クラスを作成しました。onReceive() メソッドでは、アプリケーションが実行されている場合に正常に機能するステータス バー通知を開始します。ただし、閉じるまで戻るボタンをクリックしてアプリケーションを終了すると、通知は表示されなくなります。

受信者がまったく呼び出されていないかどうかはわかりませんが、通知が機能しないだけなのか、受信者が呼び出されていないのかはわかりません。

マニフェスト ファイルに登録されます。

<receiver android:name=".calendar.CalendarAlarmReceiver" >
</receiver>

これは受信機の故障ではなく、アプリケーションが停止するとアラームがキャンセルされる可能性があることを読みました。その場合、バックグラウンドで常に動作しているサービスにアラームを設定するだけの解決策はありますか?

4

2 に答える 2

4

アラームは OS によって管理され、通常、アプリケーションが「終了」してもクリアされません。レシーバーにログを記録し、logcat の出力を監視して、呼び出されているかどうかを確認します。そうである場合は、通知コードをデバッグします。

于 2012-10-02T03:02:19.590 に答える
0

レシーバーは、聞いているブロードキャスト用のインテント フィルターを備えている必要があります。Nikolay が以下のコメントで述べたように、明示的な意図を送信する場合、これは必要ありません。ですから、それを覚えておいてください。

<receiver android:name=".calendar.CalendarAlarmReceiver">
    <intent-filter>
        <action android:name="REFRESH_THIS"/>
    </intent-filter>
</receiver>

同様に、コードの送信中に「REFRESH_THIS」というアクションを設定する必要があります。

この例を見てください。それは素晴らしい説明でプロセス全体を説明します。

于 2012-10-02T00:13:34.470 に答える