public void start() {
    synchronized (this) {
      if (!preferences.isCommandEnabled()) {
        Log.w(NotifierConstants.LOG_TAG, "Commands disabled, not starting");
        return;
      }

      // Ensure the CPU keeps running while we listen for connections
      if (wakeLock == null) {
        PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, COMMANDS_LOCK_TAG);
        wakeLock.acquire();
      }

      if (preferences.isBluetoothCommandEnabled()) {
        startBluetoothListener();
      }

      if (preferences.isIpCommandEnabled()) {
        startIpListener();
      }

      if (preferences.isUsbCommandEnabled()) {
        startUsbListener();
      }

      startDiscoveryListener();

      preferences.registerOnSharedPreferenceChangeListener(this);
    }
  }