title: Android Bluetooth Paring Input Device
body: <p>I am trying to make a pairing by code and it works only for normal devices. If I use a bluetooth scanner it pairs with it but the device doesn't work till I go to android settings and select the Input Device checkbox. How can I do this by code?</p>
  
  <p>Thank you.</p>
  
  <p>Here is my pairing code:</p>
  
  <pre><code>public static BluetoothSocket createL2CAPBluetoothSocket(String address, int psm){
      return createBluetoothSocket(TYPE_L2CAP, -1, false,false, address, psm);
  }
  // method for creating a bluetooth client socket
  private static BluetoothSocket createBluetoothSocket(
          int type, int fd, boolean auth, boolean encrypt, String address, int port){
      try {
          Constructor&lt;BluetoothSocket&gt; constructor = BluetoothSocket.class.getDeclaredConstructor(
                  int.class, int.class,boolean.class,boolean.class,String.class, int.class);
          constructor.setAccessible(true);
          BluetoothSocket clientSocket = (BluetoothSocket)
                  constructor.newInstance(type,fd,auth,encrypt,address,port);
          return clientSocket;
      }catch (Exception e) { return null; }
  }
  
  private void doPair(final BluetoothDevice device, final int deviceTag) {
      try {
          Method method = device.getClass().getMethod("createBond",
                  (Class[]) null);
          method.invoke(device, (Object[]) null);
      } catch (Exception e) {
          Log.e(LOG_TAG, "Cannot pair device", e);
      }
  
      BroadcastReceiver mReceiver = new BroadcastReceiver() {
  
          @Override
          public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
  
              if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
                  final int state = intent.getIntExtra(
                          BluetoothDevice.EXTRA_BOND_STATE,
                          BluetoothDevice.ERROR);
                  final int prevState = intent.getIntExtra(
                          BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE,
                          BluetoothDevice.ERROR);
  
                  if (state == BluetoothDevice.BOND_BONDED
                          &amp;&amp; prevState == BluetoothDevice.BOND_BONDING) {
                      Log.d(LOG_TAG, "Paired with new device");
                      if (listener != null) {
                          listener.onBluetoothPairedDeviceChange(bluetoothAdapter
                                  .getBondedDevices().iterator().next()
                                  .getName(), deviceTag);
                      }
                      context.unregisterReceiver(this);
                  } else if (state == BluetoothDevice.BOND_NONE
                          &amp;&amp; prevState == BluetoothDevice.BOND_BONDING) {
                      Log.d(LOG_TAG, "Cannot pair with new device");
                      if (listener != null) {
                          listener.onBluetoothStatusChange(BluetoothHelper.IDLE_STATUS);
                      }
                      context.unregisterReceiver(this);
                  }
              }
          }
  
      };
  
      IntentFilter intent = new IntentFilter(
              BluetoothDevice.ACTION_BOND_STATE_CHANGED);
      context.registerReceiver(mReceiver, intent);
  }
  </code></pre>