Я создаю приложение для Android, которое обменивается данными с платой Arduino через Bluetooth, у меня есть код Bluetooth в своем классе под названием BlueComms. Для подключения к устройству Я использую следующий Methord:Удержание соединения Bluetooth с помощью нескольких действий
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");
}
}
Это соединяется нормально, но как только я оставляю свою деятельность я подключил через него разрывает соединение, показывая это через LogCat,
D/dalvikvm(21623): GC_CONCURRENT freed 103K, 10% free 2776K/3056K, paused 5ms+2ms, total 35ms
я больше не может подключаться к устройству, но если я вызываю killBt(), он вызывает фатальную ошибку, и если я пытаюсь отправить данные, я получаю ошибку «Создание сокета». Мой отправить сообщение с кодом выглядит следующим образом:
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);
}
}
Как я должен идти о предотвращении соединения от времени паузы в деятельности я соединиться с тем, когда я переключаюсь на другую деятельность, я коммутационная деятельность с этим кодом:
Intent myIntent = new Intent(v.getContext(), Timelapse.class);
startActivityForResult(myIntent, 0);
Большое спасибо, Rozz
Эй, это было некоторое время, так как я смотрел на этот код, но я в конечном итоге решить мою проблему с помощью служб - не стесняйтесь, чтобы просмотреть код на GitHub, хотя она должна быть чудовищно из к настоящему времени. https://github.com/RoryCrispin/toroCamAndroid/blob/Local-Camera-/src/com/rozzles/torocam/core/BlueComms.java –
Чтобы добавить, вы можете увидеть, где действия привязываются к сервису здесь: https: //github.com/RoryCrispin/toroCamAndroid/blob/Local-Camera-/src/com/rozzles/torocam/core/toroCamTrigger.java#L84 –