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

If you really want the activity to be calling methods on the service, its time to learn about AIDL, which allows an Activity to make function calls on a bound service via an RPC mechanism. Documentation found here.

于 2013-01-26T16:30:57.970 回答
0

我已经实现了这样的功能(活动中的服务调用方法):

服务发送广播消息。

Activity 有一个本地嵌套的广播接收器,可以调用父 Activity 中的方法。

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 回答