6

asmackを使用してAndroid用のインスタントメッセンジャーを作成しています。xmppサーバーに接続するチャットサービスを開始しました。サービスはxmppサーバーに接続し、名簿とプレゼンスを取得しています。しかし今、私はUIを更新し、アカウントオブジェクトのリストをサービスからアクティビティに渡す必要があります。私はParcelableとserializableに出くわしました。このサービスの正しい方法がわかりません。誰かが私が同じことをすることができるいくつかのコードサンプルを提供できますか?

ありがとう

4

1 に答える 1

1

あなたは素敵なアプリを作っています。smackについてはよくわかりませんが、オブジェクトをサービスからアクティビティに渡す方法は知っています。あなたはあなたのサービスのためにAIDLを作ることができます。AIDLはサービスオブジェクトをアクティビティに渡します。次に、アクティビティUIを更新できます。このリンクはあなたに役立つかもしれません!

まず、エディタを使用して.aidlファイルを作成し、このファイルをデスクトップに保存する必要があります。AIDLは、他に類を見ないインターフェースのようなものです。同様に、ObjectFromService2Activity.aidl

package com.yourproject.something

// Declare the interface.
interface ObjectFromService2Activity {
    // specify your methods 
    // which return type is object [whatever you want JSONObject]
    JSONObject getObjectFromService();

}

今、このファイルをコピーして、プロジェクトのフォルダに貼り付けると、ADTプラグインは、GEN /フォルダに自動的にObjectFromService2Activityインタフェースとスタブを生成します。

AndroidのSDKはまた、あなたがEclipseを使用しない場合には、Javaコードを生成するために使用することができます(ツール/ディレクトリ内)(コマンドライン)コンパイラAIDLを含んでいます。

サービスのobBind()メソッドをオーバーライドします。同様に、Service1.java

public class Service1 extends Service {
private JSONObject jsonObject;

@Override
public void onCreate() {
  super.onCreate();
  Log.d(TAG, "onCreate()");
  jsonObject = new JSONObject();
}

@Override
public IBinder onBind(Intent intent) {

return new ObjectFromService2Activity.Stub() {
  /**
   * Implementation of the getObjectFromService() method
   */
  public JSONObject getObjectFromService(){
    //return your_object;
    return jsonObject;
  }
 };
}
@Override
public void onDestroy() {
   super.onDestroy();
   Log.d(TAG, "onDestroy()");
 }
}

アクティビティを使用して、またはこのサービスを開始する場所を使用してサービスを開始し、ServiceConnectionを作成します。好き、

Service1 s1;
private ServiceConnection mConnection = new ServiceConnection() {
    // Called when the connection with the service is established
    public void onServiceConnected(ComponentName className, IBinder service) {
        // Following the example above for an AIDL interface,
        // this gets an instance of the IRemoteInterface, which we can use to call on the service
        s1 = ObjectFromService2Activity.Stub.asInterface(service);
    }

    // Called when the connection with the service disconnects unexpectedly
    public void onServiceDisconnected(ComponentName className) {
        Log.e(TAG, "Service has unexpectedly disconnected");
        s1 = null;
    }
};

ObjectFromService2Activityのオブジェクトを使用すると、メソッドs1.getObjectFromService()にアクセスしてJSONObjectを返すことができます。もっと助けて楽しい!

于 2012-05-23T14:24:57.127 に答える