@Override
    public void onReceive(Context context, Intent intent) {
      String intentAction = intent.getAction();
      Bundle extras = intent.getExtras();
      boolean shouldRespond = true;
      if (extras != null) {
        // See if an Id was set in the broadcast Intent. If it was, treat it as a filter.
        String broadcastObjectId = extras.getString(LikeActionController.ACTION_OBJECT_ID_KEY);
        shouldRespond =
            Utility.isNullOrEmpty(broadcastObjectId)
                || Utility.areObjectsEqual(objectId, broadcastObjectId);
      }

      if (!shouldRespond) {
        return;
      }

      if (LikeActionController.ACTION_LIKE_ACTION_CONTROLLER_UPDATED.equals(intentAction)) {
        updateLikeStateAndLayout();
      } else if (LikeActionController.ACTION_LIKE_ACTION_CONTROLLER_DID_ERROR.equals(
          intentAction)) {
        if (onErrorListener != null) {
          onErrorListener.onError(NativeProtocol.getExceptionFromErrorData(extras));
        }
      } else if (LikeActionController.ACTION_LIKE_ACTION_CONTROLLER_DID_RESET.equals(
          intentAction)) {
        // This will recreate the controller and associated objects
        setObjectIdAndTypeForced(objectId, objectType);
        updateLikeStateAndLayout();
      }
    }
  public boolean start() {
    if (running) {
      return false;
    }

    // Make sure that the service can handle the requested protocol version
    int availableVersion =
        NativeProtocol.getLatestAvailableProtocolVersionForService(protocolVersion);
    if (availableVersion == NativeProtocol.NO_PROTOCOL_AVAILABLE) {
      return false;
    }

    Intent intent = NativeProtocol.createPlatformServiceIntent(context);
    if (intent == null) {
      return false;
    } else {
      running = true;
      context.bindService(intent, this, Context.BIND_AUTO_CREATE);
      return true;
    }
  }