title: Android Bluetooth SPP with Galaxy S3
body: <p>I'm trying to establish a bluetooth connexion between a Samsung Galaxy S3 running with Android 4.0.3 and a RN 42 Bluetooth Chip, <a href="http://www.rovingnetworks.com/products/RN_42_RN42_I_RM" rel="nofollow">here</a> is the model : </p>
  
  <p>I used lot's of different codes for setting up a bluetooth serial communication, and all of them are working very well on the HTC Wildfire i was using before. But now that i'm using the galaxy s3 phone, it's impossible to establish the connexion. Here is the code i'm using, i found it <a href="http://nononux.free.fr/index.php?page=elec-brico-bluetooth-android-microcontroleur" rel="nofollow">here</a> : </p>
  
  <p>I put the permissions in the android manifest.</p>
  
  <p>First, my Bluetooth Interface :</p>
  
  <pre><code>public class BtInterface {
  
  private BluetoothDevice device = null;
  private BluetoothSocket socket = null;
  private InputStream receiveStream = null;
  private OutputStream sendStream = null;
  
  private ReceiverThread receiverThread;
  
  Handler handler;
  
  public BtInterface(Handler hstatus, Handler h) {
      Set&lt;BluetoothDevice&gt; setpairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
      BluetoothDevice[] pairedDevices = (BluetoothDevice[]) setpairedDevices.toArray(new BluetoothDevice[setpairedDevices.size()]);
  
      for(int i=0;i&lt;pairedDevices.length;i++) {
          if(pairedDevices[i].getName().contains("MyBluetoothChip")) {
              device = pairedDevices[i];
              try {
                  socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
                  receiveStream = socket.getInputStream();
                  sendStream = socket.getOutputStream();
              } catch (IOException e) {
                  e.printStackTrace();
              }
              break;
          }
      }
  
      handler = hstatus;
  
      receiverThread = new ReceiverThread(h);
  }
  
  public void sendData(String data) {
      sendData(data, false);
  }
  
  public void sendData(String data, boolean deleteScheduledData) {
      try {
          sendStream.write(data.getBytes());
          sendStream.flush();
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
  
  public void connect() {
      new Thread() {
          @Override public void run() {
              try {
                  socket.connect();
  
                  Message msg = handler.obtainMessage();
                  msg.arg1 = 1;
                  handler.sendMessage(msg);
  
                  receiverThread.start();
  
              } catch (IOException e) {
                  Log.v("N", "Connection Failed : "+e.getMessage());
                  e.printStackTrace();
              }
          }
      }.start();
  }
  
  public void close() {
      try {
          socket.close();
      } catch (IOException e) {
          e.printStackTrace();
      }
  }
  
  public BluetoothDevice getDevice() {
      return device;
  }
  
  private class ReceiverThread extends Thread {
      Handler handler;
  
      ReceiverThread(Handler h) {
          handler = h;
      }
  
      @Override public void run() {
          while(true) {
              try {
                  if(receiveStream.available() &gt; 0) {
  
                      byte buffer[] = new byte[100];
                      int k = receiveStream.read(buffer, 0, 100);
  
                      if(k &gt; 0) {
                          byte rawdata[] = new byte[k];
                          for(int i=0;i&lt;k;i++)
                              rawdata[i] = buffer[i];
  
                          String data = new String(rawdata);
  
                          Message msg = handler.obtainMessage();
                          Bundle b = new Bundle();
                          b.putString("receivedData", data);
                          msg.setData(b);
                          handler.sendMessage(msg);
                      }
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
  }
  }
  </code></pre>
  
  <p>Then, my main activity, with just a button to connect and a chat :</p>
  
  <pre><code>public class MonApp extends Activity implements OnClickListener {
  
  private TextView logview;
  private EditText sendtext;
  private Button connect, send;
  
  private BtInterface bt = null;
  
  private long lastTime = 0;
  
  final Handler handler = new Handler() {
      public void handleMessage(Message msg) {
          String data = msg.getData().getString("receivedData");
  
          long t = System.currentTimeMillis();
          if(t-lastTime &gt; 100) {// Pour Èviter que les messages soit coupÈs
              logview.append("\n");
              lastTime = System.currentTimeMillis();
          }
          logview.append(data);
      }
  };
  
  final Handler handlerStatus = new Handler() {
      public void handleMessage(Message msg) {
          int co = msg.arg1;
          if(co == 1) {
              logview.append("Connected\n");
          } else if(co == 2) {
              logview.append("Disconnected\n");
          }
      }
  };
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
  
      bt = new BtInterface(handlerStatus, handler);
  
      logview = (TextView)findViewById(R.id.logview);
      sendtext = (EditText)findViewById(R.id.sendtxt);
  
      connect = (Button)findViewById(R.id.connect);
      connect.setOnClickListener(this);
  
      send = (Button)findViewById(R.id.send);
      send.setOnClickListener(this);
  }
  
  @Override
  public void onClick(View v) {
      if(v == connect) {
          bt.connect();
      } else if(v == send) {
          bt.sendData(sendtext.getText().toString());
      }
  }
  }
  </code></pre>
  
  <p>When i try to connect to the chip, this is what i get from the logcat :</p>
  
  <pre><code>09-05 11:37:05.515: I/BluetoothPolicyService(2097): getBluetoothDataTransferAllowed 
  09-05 11:37:05.520: D/BluetoothPolicyService(2097): MDM: isProfileEnabled = true
  09-05 11:37:05.520: D/BluetoothUtils(6868): isSocketAllowedBySecurityPolicy start : device null
  09-05 11:37:05.525: V/BluetoothService.cpp(2097): createDeviceNative
  09-05 11:37:05.525: V/BluetoothService.cpp(2097): createDeviceNative
  09-05 11:37:05.525: V/BluetoothEventLoop.cpp(2097): onCreateDeviceResult
  09-05 11:37:05.525: V/BluetoothEventLoop.cpp(2097): onCreateDeviceResult
  09-05 11:37:05.525: E/BluetoothEventLoop.cpp(2097): onCreateDeviceResult: D-Bus error: org.bluez.Error.AlreadyExists (Already Exists)
  09-05 11:37:05.525: V/BluetoothService.cpp(2097): discoverServicesNative
  09-05 11:37:05.525: V/BluetoothService.cpp(2097): ... Object Path = /org/bluez/3094/hci0/dev_00_06_66_43_A1_E6
  09-05 11:37:05.525: V/BluetoothService.cpp(2097): ... Pattern = , strlen = 0
  09-05 11:37:10.660: V/BluetoothEventLoop.cpp(2097): onDiscoverServicesResult
  09-05 11:37:10.660: V/BluetoothEventLoop.cpp(2097): ... Device Path = /org/bluez/3094/hci0/dev_00_06_66_43_A1_E6
  09-05 11:37:10.660: E/BluetoothEventLoop.cpp(2097): onDiscoverServicesResult: D-Bus error: org.bluez.Error.ConnectionAttemptFailed (Host is down)
  09-05 11:37:10.670: V/N(6868): Connection Failed : Service discovery failed
  09-05 11:37:10.670: W/System.err(6868): java.io.IOException: Service discovery failed
  09-05 11:37:10.675: W/System.err(6868):     at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:462)
  09-05 11:37:10.675: W/System.err(6868):     at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:240)
  09-05 11:37:10.675: W/System.err(6868):     at com.example.bluetooth.BtInterface$1.run(BtInterface.java:68)
  </code></pre>
  
  <p>I cannot figured out why this code doesn't work with the galaxy s3. I tried to search on google about bluetooth compatibility issues but i didn't find anything so far.</p>
  
  <p>Thank you !</p>
  
  <p>Guillaume</p>