Android Bluetooth SPP con Galaxy S3

Estoy tratando de establecer una conexión Bluetooth entre un Samsung Galaxy S3 con Android 4.0.3 y un RN 42 Bluetooth Chip,aquí es el modelo:

Utilicé muchos códigos diferentes para configurar una comunicación serie por bluetooth, y todos ellos están funcionando muy bien en el HTC Wildfire que estaba usando antes. Pero ahora que estoy usando el teléfono galaxy s3, es imposible establecer la conexión. Aquí está el código que estoy usando, lo encontréaquí :

Puse los permisos en el manifiesto de Android.

Primero, mi interfaz Bluetooth:

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<BluetoothDevice> setpairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
    BluetoothDevice[] pairedDevices = (BluetoothDevice[]) setpairedDevices.toArray(new BluetoothDevice[setpairedDevices.size()]);

    for(int i=0;i<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() > 0) {

                    byte buffer[] = new byte[100];
                    int k = receiveStream.read(buffer, 0, 100);

                    if(k > 0) {
                        byte rawdata[] = new byte[k];
                        for(int i=0;i<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();
            }
        }
    }
}
}

Luego, mi actividad principal, con solo un botón para conectar y chatear:

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 > 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());
    }
}
}

Cuando intento conectarme al chip, esto es lo que obtengo del logcat:

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)

No puedo entender por qué este código no funciona con la galaxia s3. Intenté buscar en google sobre problemas de compatibilidad de bluetooth pero no encontré nada hasta ahora.

Gracias !

Guillaume

Respuestas a la pregunta(2)

Su respuesta a la pregunta