2

別のスレッドで何らかの作業を行うためにインテント サービスを開始するブロードキャスト レシーバーがあります。

インテントのドキュメントを掘り下げて、インテントの作成に使用されるコンテキストを取得する方法を見つけようとしました。

Intent(Context packageContext, Class<?> cls)

ただし、 on start コマンドの署名は次のとおりであり、渡されたコンテキストにアクセスできません。get context がインテントのパブリック メソッドとは見なされませんでしたが、何かを見落としていた可能性があります。

public int onStartCommand(Intent intent, int flag, int startId)

UIまたはハンドラーにアクセスするためにレシーバーに戻る2番目のブロードキャストのルートに行かずに、インテントを作成するために使用されたコンテキストに到達する方法はありますか?

4

1 に答える 1

1

インテントのドキュメントを掘り下げて、インテントの作成に使用されるコンテキストを取得する方法を見つけようとしました

それContextはあなたのプロセスにないかもしれないので、それは不可能です。また、必要ありません。

UIにアクセスするために受信機に戻る2番目のブロードキャストのルートに行かずに、インテントを作成するために使用されたコンテキストに到達する方法はありますか?

BroadcastReceiverUI を更新できません。したがって、たとえあなたが望んでいたことが可能であったとしても (それは不可能です)、それはあなたにとって何の役にも立たないでしょう.

さらに、 を開始しているため、UIIntentServiceがない場合があります。ユーザーは自分の電話を制御しているため、アプリを離れてホーム画面や別のアプリに移動しても問題ありません。

これに対処する 1 つのパターンは、 から順序付きブロードキャストを送信することIntentServiceです。BroadcastReceiverマニフェストに登録されている通常の優先度のレシーバーを使用して、アクティビティにそのブロードキャストの高優先度を実装させます。後者は を発生させるためNotification、アクティビティがフォアグラウンドにない場合、ユーザーにはNotification代わりに が表示されます。もう少し詳しく説明したブログ投稿と、この手法を示すサンプル アプリケーションを次に示します。

于 2012-06-04T14:29:19.833 に答える