emissary
lucasmontano
19
Visit GitHub RepoEvent Buses

Emissary

A simple way to bind and exchange messages between activities and services.

#What emissary do for you

  • Perform interprocess communication (IPC) using Messenger.
  • Implements the Handler, where the service receives the incoming Message and decides what to do.

#Activity Implementation

Declaring the emissary

    private Emissary.IEmissary emissary;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        emissary = Emissary.getInstance(this);
    }

Bind a service with emissary connection

  Intent intent = new Intent(this, WithLibService.class);
  bindService(intent, emissary.getServiceConnection(), Service.BIND_AUTO_CREATE);

Subscribe to a event

  emissary.subscribe(WithLibService.ON_CHANGE_TIME_ZONE, new Emissary.EmissaryMessengerCallback() {

      @Override
      public void data(Bundle data) {
          ((TextView) findViewById(R.id.time_zone)).setText(data.getString(WithLibService.ARG_TIME_ZONE));
      }
  });

Request something to service

  emissary.request(WithLibService.GET_TIME_ZONE, new Emissary.EmissaryMessengerCallback() {

    @Override
    public void data(Bundle data) {
        Toast.makeText(WithLibActivity.this, data.getString(WithLibService.ARG_TIME_ZONE), Toast.LENGTH_SHORT).show();
    }
  });

#Service Implementation

Declaring the Emissary

  private final Emissary.IEmissary emissary = Emissary.getInstance(this);

Binding

  @Override
  public IBinder onBind(Intent intent) {
      return emissary.getIBinder();
  }

Subscribe to respond activity's request

  public void onCreate() {
      super.onCreate();

      emissary.subscribe(GET_TIME_ZONE, new Emissary.EmissaryMessengerCallback() {
          @Override
          public void data(Bundle data) {
              String timeZone = TimeZone.getDefault().getDisplayName();
              Bundle bundle = new Bundle();
              bundle.putString(WithLibService.ARG_TIME_ZONE, timeZone);
              emissary.send(GET_TIME_ZONE, bundle);
          }
      });
  }

Send a Event to Subscribers

  String timeZone = TimeZone.getDefault().getDisplayName();
  Bundle bundle = new Bundle();
  bundle.putString(WithLibService.ARG_TIME_ZONE, timeZone);
  emissary.send(ON_CHANGE_TIME_ZONE, bundle);

Android Arsenal

Become a better Android Developer
Millions of developers are learning at MindOrks

Online Training Program

Featured Blogs

Our Team

MindOrks is Certainly one of the best online blog to stay on top of all the Android development news, coding and design patterns. Finally a blog I can count on to keep myself updated with latest and greatest things happening in Android world.

Vipul Shah
Android Developer
Microsoft

Become Pro in Android by watching videos

OUR LEARNERS WORK AT