簡単かもしれませんが、今のところこれを正確に理解することはできませんでした... AlarmMangagerによってトリガーされるのを待っているBroadcastReceiver
を取得しました-これは正常に機能します。
現在:イベントが発生した場合、メインアクティビティの画面上のいくつかの要素を更新する必要があるため、そのバックグラウンドのBroadcastReceiverからアクティビティにインテントを送信したいと思います-ただし、現在の場合のみフォアグラウンドでは、別名アクティブ。
それが実行されていないか表示されていない場合、私は気にしません-そして私がしたい最後のことは私の意図によってアクティビティを開始することです! onResume()メソッドでビューの再描画を処理するので、まったく気にしません。
それを行う方法についてのヒントはありますか?ありがとう!
EDIT:私のBroadcastReceiverは、ユーザーに通知する必要のあるアラームを待機しています。したがって、それはそこにあり、マニフェストで宣言されている必要があります。問題は、言及されたアクティビティが現在最前線にあるかどうかを判断する必要があるということです。
あなたはAlarmManagerに精通していると思います(新しいアラームの作成、レシーバーの登録...)ので、それについては説明しません。あなたの質問に対する解決策を教えてください。
BroadcastReceiverをクラスファイルとマニフェストに登録する代わりに、アクティビティに新しいBroadcastReceiverを作成し、それをonResumeメソッドに登録し、onPauseメソッドに登録解除します。これはアクティビティで次のようになります。
private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction("your alarm action");
...
}
@Override
protected void onResume() {
registerReceiver(mIntentReceiver, mIntentFilter);
...
super.onResume();
}
@Override
protected void onPause() {
unregisterReceiver(mIntentReceiver);
...
super.onPause();
}
受信者は、アクティビティがフォアグラウンドにある場合にのみアラームインテントを受信します:)
(私の英語がはっきりしない場合は申し訳ありません)