3

アプリケーションは 2.3.3 で開発されています

私のアプリケーションでは、ブロードキャスト レシーバーからサービスを開始しています。このサービスは Location Manager を呼び出し、緯度と経度を取得します。緯度と経度の値をサービスから放送受信機に送り返すことはできますか?

もし、そうなら?どうやってそれをするのですか?

いいえ?-> これが現在の私のアプローチです... SharedPreferences オブジェクトを使用してこれらの値を保持し、BroadCast レシーバーでアクセスしました。これは機能しますか?

これについてさらにいくつか質問があります。回答後に質問を編集します...ありがとう..

[編集] 上記の質問への回答 -> サービスからブロードキャスト レシーバーにデータを送信できますが、一般的には良い方法ではありません。

4

2 に答える 2

1

位置データを持つサービスから新しいインテントをブロードキャストすることにより、情報をブロードキャストレシーバーに戻すことができます。インテントのカスタムアクションを作成し、そのアクションを処理するためにブロードキャストレシーバーを登録する必要があります。ここでは、カスタムアクションを使用したインテントの作成と受信について説明します

ただし、ほとんどの場合、これは悪いアプローチだと思います。一般に、放送受信機は単にインテントを解析し、インテントサービスを起動してすべての作業を行う必要があります。その場所で何かをする必要がある場合、サービスは放送受信機ではなくそれを行う必要があります。また、onReceive()の終了時に、ブロードキャストレシーバーがすぐに破棄されるため、すべての状態が失われることに注意することも重要です。

緯度/経度の収集タスクの目的についてより多くの情報を提供していただければ、より多くの質問に回答するか、回答をより具体的に更新していただければ幸いです。

[編集]コメントできないので、ケリムの答えに2セントを追加します。私が何か巨大なものを見逃していない限り(私がコメントできるので、私にケリムを知らせてください)、あなたが期待するように機能しないかもしれません。放送受信機のonReceive()機能が終了すると、放送受信機は破壊されます。送信したハンドラーは存続しますが、ブロードキャストレシーバーのデータは存在せず、ハンドラーはブロードキャストレシーバーの関数を呼び出すことができません。ハンドラーはブロードキャストレシーバーのデータや関数にアクセスできないため、サービスで実行する必要のあるすべてのことを実行することもできます。

于 2012-11-29T07:21:23.863 に答える
0

Messengerクラスを使用して、プロセス間で通信できます。

Service を開始するときに、Messenger オブジェクトをエクストラとして渡します。次に、サービスがジョブを完了した後、呼び出して緯度と経度の値を返すことができますmessenger.send(message);

Messenger クラスは、そのコンストラクターで Handler オブジェクトを受け取ります。この Messenger を介して送信された Message オブジェクトは、Handler.sendMessage(message)直接呼び出されたかのように Handler に表示されます。

詳細を説明する素晴らしいチュートリアルがあります: http://www.vogella.com/articles/AndroidServices/article.html#servicecommunication_handler

于 2012-11-29T07:22:45.350 に答える