Android-在特定的Android设备上通过两个蓝牙设备发布数据收集问题

问题描述

我有一个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 (将#修改为@)