0

ええと、私にはサービスがあり、アクティビティがあります。彼らはメッセージを介して通信します(メッセージと通信する必要があるので、インテントやその他のことについて教えてはいけません)。

サービスからバンドルを受け取りました。すべて問題ありません。

今受け取ったバンドルで何かしたいです。「SomeClass」からメソッドを呼び出したいのですが、「IncomingHandler」クラス内にいるため、呼び出すことができません。

IncomingHandler内からSomeClassを呼び出す最良の方法は何ですか?

前もって感謝します

class SomeClass implements ServiceConnection {
    class IncomingHandler extends Handler {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case MyService.MS_GET_SOMETHING:
                         Bundle received=msg.getData();
                         ...
4

2 に答える 2

1

アクティビティでサービスのメソッドを呼び出す必要がある場合は、AIDLについて学習します。これにより、アクティビティはRPCメカニズムを介してバインドされたサービスで関数呼び出しを行うことができます。 ドキュメントはここにあります。

于 2013-01-26T16:30:57.970 に答える
0

私は次のような機能(アクティビティのサービス呼び出しメソッド)を実装しました:

サービスはブロードキャストメッセージを送信します。

アクティビティには、親アクティビティのメソッドを呼び出すことができるローカルのネストされたブロードキャストレシーバーがあります。

public class MainActivity extends Activity {
    private BroadcastReceiver myReceiver = null;

    class _RemoteTimeTrackerReceiver extends BroadcastReceiver {
        @Override
        public void onReceive (Context context, Intent intent) {
                            // call method in activity
            reloadGui();
        }
    }

    @Override
    public void onResume() {
        super.onResume();

        if (myReceiver == null)
        {
            myReceiver = new _RemoteTimeTrackerReceiver();
            IntentFilter filter = new IntentFilter(Global.REFRESH_GUI);
            registerReceiver(myReceiver, filter);
        }

        reloadGui();

    }

    @Override
    public void onPause() {

        if (myReceiver != null)
        {
            unregisterReceiver(myReceiver);
            myReceiver = null;
        }

        super.onPause();

    }

            void reloadGui() {}
于 2013-01-26T16:56:20.933 に答える