I am creating an Android application that communicates with the Arduino board via bluetooth, I have a Bluetooth code in my class called BlueComms. To connect to the device, I use the following method:
public boolean connectDevice() { CheckBt(); BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address); Log.d(TAG, "Connecting to ... " + device); mBluetoothAdapter.cancelDiscovery(); try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); btSocket.connect(); outStream = btSocket.getOutputStream(); Log.d(TAG, "Connection made."); return true; } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { Log.d(TAG, "Unable to end the connection"); return false; } Log.d(TAG, "Socket creation failed"); } return false; } private void CheckBt() { mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (!mBluetoothAdapter.isEnabled()) { System.out.println("Bt dsbld"); } if (mBluetoothAdapter == null) { System.out.println("Bt null"); } }
This connection is fine, but as soon as I leave the activity with which I connected, it disconnects the connection, showing it through LogCat,
D/dalvikvm(21623): GC_CONCURRENT freed 103K, 10% free 2776K/3056K, paused 5ms+2ms, total 35ms
I can no longer connect to the device, but if I call killBt (), it causes a fatal error, and if I try to send data, I get a "Socket Error" error message. My message code is sent as follows:
public void sendData(String data, int recvAct) { try { outStream = btSocket.getOutputStream(); } catch (IOException e) { Log.d(TAG, "Bug BEFORE Sending stuff", e); } String message = data; byte[] msgBuffer = message.getBytes(); try { outStream.write(msgBuffer); } catch (IOException e) { Log.d(TAG, "Bug while sending stuff", e); } }
How should I prevent the connection from being suspended by the activity that I connect to, when I switch another action, I switch the actions with this code:
Intent myIntent = new Intent(v.getContext(), Timelapse.class); startActivityForResult(myIntent, 0);
Thanks a lot Rozz