1

同じアプリケーションにアクティビティとintentServiceがあります。アクティビティが終了した後もサービスを実行し続ける必要があるため、バインドしたくありません。私は何時間もグーグルをしていて、これを行う方法の良い例を1つ見つけることができません。サービスを開始してエクストラを渡すことはできますが、サービスはメッセンジャーを使用してデータをアクティビティに送り返す必要があります。

このプロセスには基本的に...Message.obtain()を呼び出して空のMessageオブジェクトを取得する必要なデータをそのオブジェクトに入力するMessengerでsend()を呼び出し、メッセージをパラメーターとして提供する

しかし、これを行う方法に関するコード例は見つかりません。

いくつかの投稿は、私が持っているSDKサンプルAPIDemosのmessengerServiceの例を参照していますが、そこには何も見つかりません。ありがとう、ゲイリー

4

2 に答える 2

3

これにはブロードキャストを使用する必要があります。インテントサービスの終了後にブロードキャストメッセージを送信できます。また、アクティビティ内(データを受信する場所)にインテントフィルターを登録する必要があります。

これはあなたを助けるかもしれません:http ://www.mysamplecode.com/2011/10/android-intentservice-example-using.html

于 2012-10-11T04:08:12.673 に答える
1

記録のために、他の人に役立つかもしれないので、私は自分の質問に答えます...(アクティブな状態を維持する必要があるため、IntentServiceではなく通常のサービスを使用しています)

アクティビティがサービスからメッセージを受信するには、ハンドラーをそのようにインスタンス化する必要があります...

   private Handler handler = new Handler() 
{
    public void handleMessage(Message message) 
    {
        Object path = message.obj;

        if (message.arg1 == 5 && path != null)
        {
            String myString = (String) message.obj;
            Gson gson = new Gson();
            MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
            String astr = "debug";
            astr = astr + " ";
        }
    };
};

上記のコードは私のデバッグのもので構成されています。サービスはそのようにアクティビティにメッセージを送信します...

                MapPlot mapleg = new MapPlot();
            mapleg.fromPoint = LastGeoPoint;
            mapleg.toPoint = nextGeoPoint;              
            Gson gson = new Gson();
            String jsonString = gson.toJson(mapleg); //convert the mapleg class to a json string
            debugString = jsonString;

            //send the string to the activity
            Messenger messenger = (Messenger) extras.get("MESSENGER");
            Message msg = Message.obtain();  //this gets an empty message object

            msg.arg1 = 5;
            msg.obj = jsonString;
            try
            {
                messenger.send(msg);
            }
            catch (android.os.RemoteException e1)
            {
                Log.w(getClass().getName(), "Exception sending message", e1);
            }               

今のところ、メッセージ識別子として番号5を選択しました。この場合、json文字列で複雑なクラスを渡し、アクティビティでそれを再構築しています。

于 2012-10-15T16:26:33.357 に答える