title: How to Use Classes - Bluetooth Thread
body: <p>I'm trying to connect android and arduino and send data between them. I am following the guide <a href="http://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection" rel="nofollow">http://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection</a></p>
  
  <p>I think I vaguely understand how this works but I don't have a complete mastery of the basics so I am a bit stuck.</p>
  
  <p>I am looking at the code for "connecting as a client":</p>
  
  <pre><code>private class ConnectThread extends Thread {
  private final BluetoothSocket mmSocket;
  private final BluetoothDevice mmDevice;
  
  public ConnectThread(BluetoothDevice device) {
      // Use a temporary object that is later assigned to mmSocket,
      // because mmSocket is final
      BluetoothSocket tmp = null;
      mmDevice = device;
  
      // Get a BluetoothSocket to connect with the given BluetoothDevice
      try {
          // MY_UUID is the app's UUID string, also used by the server code
          tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
      } catch (IOException e) { }
      mmSocket = tmp;
  }
  
  public void run() {
      // Cancel discovery because it will slow down the connection
      mBluetoothAdapter.cancelDiscovery();
  
      try {
          // Connect the device through the socket. This will block
          // until it succeeds or throws an exception
          mmSocket.connect();
      } catch (IOException connectException) {
          // Unable to connect; close the socket and get out
          try {
              mmSocket.close();
          } catch (IOException closeException) { }
          return;
      }
  
      // Do work to manage the connection (in a separate thread)
      manageConnectedSocket(mmSocket);
  }
  
  /** Will cancel an in-progress connection, and close the socket */
  public void cancel() {
      try {
          mmSocket.close();
      } catch (IOException e) { }
  }
  }
  </code></pre>
  
  <p>and for "managing connection"</p>
  
  <pre><code>private class ConnectedThread extends Thread {
  private final BluetoothSocket mmSocket;
  private final InputStream mmInStream;
  private final OutputStream mmOutStream;
  
  public ConnectedThread(BluetoothSocket socket) {
      mmSocket = socket;
      InputStream tmpIn = null;
      OutputStream tmpOut = null;
  
      // Get the input and output streams, using temp objects because
      // member streams are final
      try {
          tmpIn = socket.getInputStream();
          tmpOut = socket.getOutputStream();
      } catch (IOException e) { }
  
      mmInStream = tmpIn;
      mmOutStream = tmpOut;
  }
  
  public void run() {
      byte[] buffer = new byte[1024];  // buffer store for the stream
      int bytes; // bytes returned from read()
  
      // Keep listening to the InputStream until an exception occurs
      while (true) {
          try {
              // Read from the InputStream
              bytes = mmInStream.read(buffer);
              // Send the obtained bytes to the UI activity
              mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
                      .sendToTarget();
          } catch (IOException e) {
              break;
          }
      }
  }
  
  /* Call this from the main activity to send data to the remote device */
  public void write(byte[] bytes) {
      try {
          mmOutStream.write(bytes);
      } catch (IOException e) { }
  }
  
  /* Call this from the main activity to shutdown the connection */
  public void cancel() {
      try {
          mmSocket.close();
      } catch (IOException e) { }
  }
  }
  </code></pre>
  
  <p>I basically copied the exact code and made new java files containing them.
  I want to actually use these classes to send data so I paired the devices and then found the IDs like:</p>
  
  <pre><code>BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
      Set&lt;BluetoothDevice&gt; pairedDevices = mBluetoothAdapter.getBondedDevices();
      if (pairedDevices.size() &gt; 0) 
      {
          // Loop through paired devices
          for (BluetoothDevice device : pairedDevices) 
          {
              if (device.getName().equals("HC-06"))
              {
                  //NEED TO INSERT CODE HERE (I think...)             
              }
              else
              {
                  Intent intentneedsetting = new Intent(this, NeedSettingsActivity.class);       
                  startActivity(intentneedsetting);
              }
          }
      }
      else
      {
          Intent intentneedsetting = new Intent(this, NeedSettingsActivity.class);       
          startActivity(intentneedsetting);
      } 
  </code></pre>
  
  <p>Any help regarding how to use these classes (ConnectThread/ConnectedThread) will be very appreciated!</p>