11

Android で Bluetooth 経由の RFCOMM ソケットを使用すると、データの整合性に問題が発生します。接続に問題はありませんが、受信したデータが文字化けしており、送信されたデータと同じではありません。データは、電話機が接続されている Bluetooth アダプタを介して RS232 デバイスによって送信されます。ノートパソコンと接続すれば正常にデータを受信できるので、アダプタに問題はありません。

私の Bluetooth 接続は、Android 開発者サイト ( http://developer.android.com/resources/samples/BluetoothChat/index.html ) にあるBluetoothChatサンプル アプリケーションに基づいて処理され、変更はありません。送信されるデータは、プレーン テキストと制御文字 (ユーザーに表示される前に取り除かれます) です。私が抱えている特定の問題は、テキストの一部が欠落している、一部が繰り返されているなどです。面白いことに、端末アプリを使用してコンピューターに接続し、そこに入力すると、データが正常に送信されます。さらに、GetBlueアプリを使用してデバイスに接続すると、データは正常に受信されます。

問題は、Bluetooth データ転送を処理するために GetBlue が異なる可能性があること、または Android の RFCOMM ソケットを介して Bluetooth データを受信する別の方法があることだと思います。

4

2 に答える 2

10

解決策の修正は、InputStream で read() を呼び出した直後に、接続されたスレッドで文字列を作成し、表示のために文字列をメイン スレッドに戻すことでした。何らかの理由で、スレッド間でバイト配列を渡すと、かなりの繰り返しとデータ損失が発生しました。

変更された run() コード:

    public void run() {
        byte[] buffer = new byte[256];  // buffer store for the stream
        int bytes; // bytes returned from read()

        // Keep listening to the InputStream until an exception occurs
        while (true) {
            try {
                // Read from the InputStream
                bytes = mmInStream.read(buffer);
                String readMessage = new String(buffer, 0, bytes);
                // Send the obtained bytes to the UI Activity
                mHandler.obtainMessage(MESSAGE_READ, bytes, -1, readMessage)
                        .sendToTarget();
            } catch (IOException e) {
                break;
            }
        }
    }

そしてハンドラー受信:

        case MESSAGE_READ:
            // Read in string from message, display to mainText for user
            String readMessage = (String) msg.obj;
            if (msg.arg1 > 0) {
                mainText.append(readMessage);
            }
于 2010-08-19T05:53:19.050 に答える
2

このエラーは、オブジェクト参照が UI に渡されるためです。バイト配列 (バッファ) を別のバイト配列にコピーすると機能します。

于 2013-04-01T10:29:12.600 に答える