あなたが説明したようにこれを実際に行うことはできません。@CommonsWareは正しく、選択したアーキテクチャに欠陥があります。
BroadcastReceiverは短命です。したがって、非同期呼び出しを行うことはできず、「かなりの時間」かかるタスクを実行することもできません。特定のイベントによってトリガーBroadcastReceiverされ、そのイベントのためにかなりの量の作業を行う必要がある場合は、その作業をに委任する必要がありますService。
通常(例:内Activity)、から情報を要求するService場合は、にバインドしServiceてサービスに同期呼び出しを行い、必要なデータを要求するか、サービスを非同期に呼び出すことができます(つまりIntent、 it)次に、返された結果をリッスンします(を使用してBroadcastReceiver)。はにバインドできず、非同期呼び出しを行うことができないBroadcastReceiverため、これらのメソッドはどちらもaからは機能しません。BroadcastReceiverService
編集:ここで参照するためにAndroidドキュメントから関連情報をコピーしました
レシーバーのライフサイクル
オブジェクトは、へのBroadcastReceiver呼び出しの間のみ有効ですonReceive(Context, Intent)。コードがこの関数から戻ると、システムはオブジェクトが終了し、アクティブでなくなったと見なします。
これは、実装で実行できることに重要な影響を及ぼします
onReceive(Context, Intent)。非同期操作を処理するために関数から戻る必要があるため、非同期操作を必要とするものは利用できませんが、その時点でBroadcastReceiverはアクティブではなくなり、システムはアクティブではなくなります。非同期操作が完了する前に、プロセスを自由に強制終了できます。
特に、ダイアログを表示したり、内からサービスにバインドしたりすることはできませんBroadcastReceiver。前者の場合、代わりに
NotificationManagerAPIを使用する必要があります。後者の場合、を使用
Context.startService()してコマンドをサービスに送信できます。