Bluetooth経由でArduinoボードと通信するAndroidアプリを構築しています。BlueCommsと呼ばれる独自のクラスに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);
どうもありがとう、ロズ