问题描述
我有一个Android应用程序,可以通过RFCOMM在两个不同的蓝牙设备之间进行连接。我正在使用的两个Android设备是Lenovo M10 HD和Dragon Touch Max10。现在,同时运行两个蓝牙设备时似乎出现了特定于Dragon Touch Max10的问题。显然,Dragon Touch Max10运行了几秒钟后似乎停止了与第二个蓝牙设备的通信。
这是我与第二台设备通信的代码:
private static class BluetoothSocketListener implements Runnable {
private BluetoothSocket socket;
private Handler handler;
private final WeakReference<TherapistActivity> wrActivity;
BluetoothSocketListener(BluetoothSocket socket,Handler handler,TherapistActivity activity) {
wrActivity = new WeakReference<TherapistActivity>(activity);
this.socket = socket;
this.handler = handler;
}
@Override
public void run() {
TherapistActivity activity = wrActivity.get();
if (activity != null) {
activity.inStream = null;
if (!Thread.currentThread().isInterrupted()) {
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
Log.i("Bluetooth bytes",new String(buffer));
activity.inStream = BluetoothConnectionService.inStream;
int bytesRead = -1;
String message = "";
while (activity.processthread) {
message = "";
try {
bytesRead = activity.inStream.read(buffer);
} catch (IOException e) {
Log.e("BLUetoOTH_COMMS","Error reading bytes");
try {
socket.close();
} catch (IOException e1) {
Log.e("BLUetoOTH_COMMS","Could not close socket");
}
activity.processthread = false;
}
if (bytesRead != -1) {
message = new String(buffer,bytesRead);
handler.post(new MessagePoster(message,activity));
}
}
}
}
}
}
private static class MessagePoster implements Runnable {
private String message;
private final WeakReference<TherapistActivity> wrActivity;
MessagePoster(String message,TherapistActivity activity) {
this.message = message;
wrActivity = new WeakReference<TherapistActivity>(activity);
}
@Override
public void run() {
final TherapistActivity activity = wrActivity.get();
if (activity != null) {
activity.seprateData(message);
}
}
}
private void seprateData(String message) {
try {
message = message.replaceAll("(\\r\\n|\\n|\\r)",",");
String[] a = message.split(",");
for (String data : a) {
if (data.length() > 0 && !data.equals(" ")) {
if (data.length() >= 10 && data.startsWith("5A")) {
al_sepratedMessageList.add(data);
} else {
if (ConnectThrough.equalsIgnoreCase("bt")) {
if (data.length() <= 5) {
char a1 = data.charat(data.length() - 1);
if (Character.isDigit(a1) || Character.isLetter(a1)) {
breakSignal.append(data);
} else {
breakSignal.setLength(0);
breakSignal.setLength(10);
}
} else {
breakSignal.append(data);
}
String s = breakSignal.toString();
if (s.length() >= 10
&& s.startsWith("5A")) {
al_sepratedMessageList.add(s);
breakSignal.setLength(0);
breakSignal.setLength(10);
}
}
}
}
}
biSymCalculation();
if (ConnectThrough.equalsIgnoreCase("usb")) {
UsbConnectionSerivce.sendMessage("K");
} else {
BluetoothConnectionService.sendMessage(mApp.biSymSocket,"K"); //keep alive command
}
} catch (Exception e) {
Log.e("Error","Error parsing data!");
}
}
显然,Dragon Touch Max10在处理两个同时的RFCOMM连接时似乎有问题。 Lenovo M10 HD没有此问题。有什么办法可以解决这个问题?
编辑-几秒钟后,Dragon Touch Max10似乎抛出IOException。有谁知道为什么会这样?
编辑2-刚刚尝试了另一台平板电脑Lenovo M10 FHD Plus,也没有问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)