AlarmManager によってトリガーされる BroadcastReceiver を実装しました。AlarmManager は BOOT_COMPLETED で初期化されます。したがって、マニフェストでレシーバーを宣言する必要があります。
私の問題は、自分のアクティビティがフォアグラウンドにない場合 (つまり、ユーザーがアプリケーションと対話していない場合) にのみ、BroadcastReceiver に何かをさせたいということです。私はリモートサーバーから情報を引き出しますが、ユーザーが現在私のアプリケーションにいる場合、ユーザーに通知したくありません。
これまでのところ、アプリケーションがフォアグラウンドにあるかどうかを判断する方法を見つけることができませんでした。そのようなことをする方法はありますか?ActivityManager は、アプリケーションが実行されているかどうかはわかりますが、フォアグラウンドにあるかどうかはわかりません。
問題は、ここで説明されているものとほとんど同じです:フォアグラウンドにある場合にのみ、BroadcastReceiver からのアクティビティに通知する
解決:
いくつかのソリューションを評価した後、バックグラウンド/フォアグラウンドでのアクティビティに対処するための最良の方法と思われるものを簡単に概説したいと思います。
推奨される方法は、ブロードキャスト レシーバーをアクティビティの onResume メソッドに登録し、onPause のアクティビティで登録解除することです。サービスまたはその他のバックグラウンド要素は、アクティビティがインターセプトする特定のアクションを含むブロードキャスト インテントを送信する必要があります。
アクティビティがフォアグラウンドにある場合、インテント レシーバーが登録され、サービスから送信されたインテントを直接処理できます。フォアグラウンドにない場合、インテントを受信しませんが、ブロードキャストを呼び出したサービスは、そのブロードキャスト インテントを誰も傍受していないことを認識し、それ自体を処理できます。たとえば、目的のアクティビティを起動したり、通知を表示したりできます。