簡體   English   中英

在Android上使用SPP而不是藍牙的數據傳輸錯誤

[英]Data Transmisison error using SPP over Bluetooth on Android

我在使用Android上的藍牙RFCOMM插槽時遇到了數據完整性問題。 我連接沒有任何問題,但我收到的數據是亂碼,與發送的數據不同。 數據由RS232設備通過手機連接的藍牙適配器發送。 適配器沒有問題,因為如果我連接筆記本電腦,數據會被正確接收。

我的藍牙連接是基於Android開發人員網站( http://developer.android.com/resources/samples/BluetoothChat/index.html )上的BluetoothChat示例應用程序處理的,沒有任何更改。 發送的數據是純文本和控制字符(在顯示給用戶之前被刪除)。 我遇到的具體問題是缺少一些文本,其中一些是重復的,等等。有趣的是,如果我連接到具有終端應用程序的計算機並輸入,那么數據就可以正常傳輸。 此外,如果我使用GetBlue應用程序連接到設備,數據將被正確接收。

所以我想問題是GetBlue可能做些什么來處理其藍牙數據傳輸,或者是否有其他方式通過Android上的RFCOMM插槽接收藍牙數據?

解決方案的修復是在連接線程中創建字符串,直接在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);
            }

此錯誤是因為對象引用傳遞給UI,如果將字節數組(緩沖區)復制到另一個字節數組,則它可以工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM