title: Android Bluetooth connection error
body: <p>I'm developing a bluetooth app to control an Arduino board, but now I made some mistakes: when I try to make a connection from my phone, it displays an <code>AlertDialog</code> (it is OK) and a lot of Toasts (they're called from <code>onSensorChanged</code>).
  The BT module connected to the board is OK (tested with other apps), so the problem is Java: I can't make a connection to my BT module. Unfortunately, Android Studio doesn't give me any logcat or errors.
  This is my code:</p>
  
  <pre><code>/* imports... */
  public class MainActivity extends AppCompatActivity implements SensorEventListener {
  
      /* Bluetooth */
      private static final int REQUEST_ENABLE_BT = 1;
      private String selectedDevice = "";
      static final UUID defaultUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");    //This SPP UUID should work for most devices.
      //private boolean isConnected = false;
      BluetoothAdapter bluetoothAdapter;
      BluetoothSocket bluetoothSocket;
  
      /* Is in full screen = ? */
      private boolean FullScreenState = true;
  
      /* Views */
      private SeekBar steeringWheel;
      private SeekBar forwardsSpeed;
      private SeekBar backwardsSpeed;
      private Toolbar toolbar;
      /* Dialogs */
      AlertDialog.Builder errorDialog;
      AlertDialog.Builder listDialog;
      ProgressDialog progressDialog;
  
      /* Accelerometer managers */
      Sensor accelerometer;
      SensorManager sensorManager;
      float Y = 0;
  
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          (...)
  
          /* Views */
          steeringWheel = (SeekBar) findViewById(R.id.Steering_wheel);
          forwardsSpeed = (SeekBar) findViewById(R.id.Forwards_speed);
          backwardsSpeed = (SeekBar) findViewById(R.id.Backwards_speed);
          /* listDialogs */
          listDialog = new AlertDialog.Builder(this);
          listDialog.setCancelable(true);
          listDialog.setTitle(R.string.app_name);
          //listDialog.setMessage("Select a device:");
          listDialog.setIcon(R.drawable.launcher_icon);
          //listDialog.setView(devicesListView);
          listDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
  
              @Override
              public void onClick(DialogInterface dialog, int which) {
                  dialog.dismiss();
              }
          });
          /* errorDialog */
          errorDialog = new AlertDialog.Builder(this);
          errorDialog.setCancelable(false);
          errorDialog.setTitle(R.string.app_name);
          errorDialog.setIcon(R.drawable.error_material);
          errorDialog.setPositiveButton("I got it", new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                  dialog.dismiss();
              }
          });
  
          /* Set the full screen and keep the screen always on... */
          /* Accelerometer initializer... */
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          ...
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          ...
          if (id == R.id.toolbar_connect) {
              initializeBT();
              return true;
  
          } else if (id == R.id.toolbar_settings) {
              /* Settings activity. Coming soon. */
              return true;
  
          } else if (id == R.id.toolbar_disconnect) {
              if (bluetoothSocket != null) {
                  try {
                      bluetoothSocket.close();
  
                  } catch (IOException e) {
                      errorDialog.setMessage("Disconnection error!");
                      errorDialog.show();
                  }
              }
              return true;
          }
      ...
      }
  
      @Override
      public void onSensorChanged(SensorEvent event) {
          /* Get the axes */
          Y = event.values[1];
  
          /* Set the steering wheel position */
          steeringWheel.setProgress((int)Y + 10);
          send(String.valueOf(steeringWheel.getProgress()));
      }
  
      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {
          ...
      }
  
  
      private class connect extends AsyncTask&lt;Void, Void, Void&gt; {
  
          private boolean connectionSuccess = false;
  
          @Override
          protected void onPreExecute() {
              progressDialog = ProgressDialog.show(MainActivity.this, "Connecting...", "Creating bluetooth connection");
          }
  
          @Override
          protected Void doInBackground(Void... devices) {
              try {
                  if (bluetoothSocket == null) {
                  //if ((bluetoothSocket == null) || (!isConnected)) {
                      bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
                      BluetoothDevice arduino = bluetoothAdapter.getRemoteDevice(selectedDevice);
                      bluetoothSocket = arduino.createInsecureRfcommSocketToServiceRecord(defaultUUID);
                      BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                      bluetoothSocket.connect();
                      connectionSuccess = true;
                  }
  
              } catch (IOException e) {
                  connectionSuccess = false;
              }
              return null;
          }
  
          @Override
          protected void onPostExecute(Void result) {
              super.onPostExecute(result);
  
              if (!connectionSuccess) {
                  errorDialog.setMessage("Connection error!");
                  errorDialog.show();
  
                  bluetoothSocket = null;
  
              } else {
                  Toast.makeText(getApplicationContext(), "Successfully connected", Toast.LENGTH_LONG).show();
                  //isConnected = true;
              }
  
              progressDialog.dismiss();
          }
      }
  
      void initializeBT() {
          /* Check for Bluetooth support */
          bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  
          if (bluetoothAdapter == null) {
              errorDialog.setMessage("Unfortunately, Bluetooth connection isn't supported on your device.");
              errorDialog.show();
  
          } else if (!bluetoothAdapter.isEnabled()) {
              /* Bluetooth disables -&gt; enable it */
              Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
              startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
  
          } else {
              devicesPrompt();
          }
      }
  
      void devicesPrompt() {
          //final ArrayList&lt;String&gt; devicesList = new ArrayList()&lt;String&gt;;
          Set&lt;BluetoothDevice&gt; pairedDevices;
          final ArrayAdapter&lt;String&gt; adapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_list_item_1);
  
          pairedDevices = bluetoothAdapter.getBondedDevices();
          if (pairedDevices.size() &gt; 0) {
              for(BluetoothDevice bluetoothDevice : pairedDevices) {
                  /* Get the device's name and the address */
                  //devicesList.add(bt.getName() + "\n" + bt.getAddress());
                  adapter.add(bluetoothDevice.getName() + "\n" + bluetoothDevice.getAddress());
              }
  
          } else {
              Toast.makeText(getApplicationContext(), "No paired Bluetooth devices found!", Toast.LENGTH_LONG).show();
          }
  
          listDialog.setAdapter(adapter, new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
                  //Log.d("RoverBluetooth!!", String.valueOf(which));
                  //;
                  String info = adapter.getItem(which);
                  selectedDevice = info.substring(info.length() - 17);
                  new connect().execute();
                  dialog.dismiss();
              }
          });
  
          listDialog.show();
      }
  
      public void send(String message) {
          message = message + "/r";
          if (bluetoothSocket != null) {
              try {
                  bluetoothSocket.getOutputStream().write(message.getBytes());
              } catch (IOException e) {
                  Toast.makeText(getApplicationContext(), "Error during sending", Toast.LENGTH_SHORT).show();
                  Log.d("RoverBluetooth errors", e.toString());
              }
          }
      }
  
      public void buttonsActions(View view) {
          int viewId = view.getId();
  
          if (viewId == R.id.Forwards_button) {             //ON
              send(String.valueOf(forwardsSpeed.getProgress() + 1000));
  
          } else if (viewId == R.id.Stop_button) {         //OFF
              send("21");
  
          } else if (viewId == R.id.Backwards_button) {    //Backwards
              send(String.valueOf(backwardsSpeed.getProgress() + 1500));
  
          } else if (viewId == R.id.Light_ON) {            //Light ON
              send("22");
  
          } else if (viewId == R.id.Light_OFF) {           //Light OFF
              send("23");
          }
      }
  }
  </code></pre>