IPC in Android using GreenRobot eventbus

前端 未结 3 1849
南笙
南笙 2021-01-05 02:28

I need to communicate with a remote service, using (greenrobot) EventBus. Unfortunately, it does not seem to work with IPC. Looking at the code, I don\'t see a workaround ei

相关标签:
3条回答
  • 2021-01-05 02:46

    There is an IPC EventBus option which allows you to send events over IPC. https://github.com/NewtronLabs/IpcEventBus

    According to the documentation all you have to do to get an event is this:

    public class Listener implements IIpcEventBusConnectionListener, IIpcEventBusObserver {
    
        public Listener() {
            String targetApp = "com.packagename";
            IIpcEventBusConnector connector =
                ConnectorFactory.getInstance().buildConnector(context, this, targetApp);
            connector.startConnection();
        }
    
        @Override
        public void onConnected(IIpcEventBusConnector connector) {
            connector.registerObserver(this);
        }
    
        @Override
        public void onEvent(IEventIpc event) {
            Log.d("ipceventbus", "Received event: " + event.getClass());
        }
    
        @Override
        public void onDisconnected(IIpcEventBusConnector connector) {
    
        }
    }
    

    And on the other side you post the event like this:

    IpcEventBus.getInstance().postEvent(new MyEvent());
    

    I created a two apps and they were able to send events to each other.

    0 讨论(0)
  • 2021-01-05 02:47

    Another library that follows the EventBus syntax more closely is HermesEventBus. It supports IPC (and intra process) both.

    Although they should have just derived from EventBus, so that we can just inject EventBus object (which is actually a HermesEventBus), and not have to update code everywhere. https://github.com/eleme/HermesEventBus

    0 讨论(0)
  • 2021-01-05 02:53

    I need to communicate with a remote service, using (greenrobot) EventBus.

    The entire point of greenrobot's EventBus, like Square's Otto and LocalBroadcastManager, is to not use IPC.

    Any help would be appreciated !

    Don't use greenrobot's EventBus for IPC. Use one of Android's myriad IPC mechanisms for IPC:

    • startActivity()
    • startActivityForResult()
    • startService()
    • bindService()
    • sendBroadcast() and its variations (e.g., sendOrderedBroadcast())
    • a ContentProvider
    0 讨论(0)
提交回复
热议问题