public int onStartCommand(Intent intent, int flags, int startId) {

    if (DBG) log("Bluetooth Dun Service is started");

    if (!mHasInitiated) {
      if (!initNative()) {
        Log.e(TAG, "Could not init BluetoothDunService");
        notifyProfileState(BluetoothProfileManager.STATE_ABNORMAL);
        return START_STICKY;
      }

      IntentFilter intentFilter = new IntentFilter();
      intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
      intentFilter.addAction(BluetoothDunService.ACCESS_RESPONSE_ACTION);
      intentFilter.addAction(BluetoothDunService.RESEND_NOTIFICATION_ACTION);
      intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
      intentFilter.addAction(BluetoothTethering.BLUETOOTH_INTERFACE_ADDED);
      mContext.registerReceiver(mReceiver, intentFilter);

      mBTtethering = BluetoothTethering.getBluetoothTetheringInstance();
      mBTtethering.registerBTTether(this);

      dunEnableNative();
      // broadcast enabling to profilemanager
      notifyProfileState(BluetoothProfileManager.STATE_ENABLING);

      mHasInitiated = true;
    } else {
      if (DBG) log("Already started, just return!");
      return START_STICKY;
    }

    return START_STICKY;
  }
  private void clearService() {
    if (!mHasInitiated) {
      return;
    }

    if (mDunState != BluetoothDun.STATE_DISCONNECTED) {
      // stopNetworkService();

      if (mDunState == BluetoothDun.STATE_CONNECTING) {
        mHandler.removeMessages(MESSAGE_CONNECT_TIMEOUT);
        removeDunAuthNotification(DUN_AUTHORIZE_NOTIFY);
      }
    }

    mBTtethering.unregisterBTTether();

    dunDisableNative();
    cleanupNative();
    mHasInitiated = false;

    mContext.unregisterReceiver(mReceiver);
  }