Hi,

I am currently developing a project which needs to write/read data via
bluetooth.
I met a werid problem when I try to use a handler to deal with the
information back from the service I created.



When I put a breakpoint after " bytes = mmInStream.read(buffer);
" ( in ConnectedThread.run() )
I can see the content in the buffer is:

[2, 0, 8, 3, -15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 12, 30, 99, 0, 99, 127,
99, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
119, 30, 12, 103, 0, 119, 70, 103, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 51, 12, 111, 0, 127, 22, 111,
51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
107, 51, 12, 123, 0, 107, 30, 123, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 63, 12, 115, 0, 99, 22, 115, 51,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 51,
12, 99, 0, 99, 70, 99, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 99, 51, 30, 99, 0, 99, 127, 99, 63, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 4, ....many
0s...]

and the bytes = 248.
These are what I expected.

However, in the hanlder, the content of readBuf becomes:
[99, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 99, 51, 30, 99, 0, 99, 127, 99, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -23, 4, 0, 0, 0, 0, 0, 0, 107, 51,
12, 123, 0, 107, 30, 123, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 99, 63, 12, 115, 0, 99, 22, 115, 51, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 51, 12, 99,
0, 99, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, ...many 0s...]



The werid thing is, if the "bytes = mmInStream.read(buffer);" reads
[2, 0, 8, 3, 31, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 4, ...many 0s...],
(bytes = 38 in this case)
then the handler can get the correct content.


I cannot figure out why, I think it is a handler mistake, any hint?



API Level: 13

The source code is based on the BluetoothChat sample, if needed, I can
provide more detailed code.
--------------------------------
Service------------------------------------------------
        private class ConnectedThread extends Thread {
                private final BluetoothSocket mmSocket;
                private final InputStream mmInStream;
                private final OutputStream mmOutStream;


                public ConnectedThread(BluetoothSocket socket) {
                        Log.d(TAG, "create ConnectedThread");
                        mmSocket = socket;
                        InputStream tmpIn = null;
                        OutputStream tmpOut = null;

                        // Get the BluetoothSocket input and output streams
                        try {
                                tmpIn = socket.getInputStream();
                                tmpOut = socket.getOutputStream();
                        } catch (IOException e) {
                                Log.e(TAG, "temp sockets not created", e);
                        }

                        mmInStream = tmpIn;
                        mmOutStream = tmpOut;
                }

                public void run() {
                        Log.i(TAG, "BEGIN mConnectedThread");
                        byte[] buffer = new byte[1024];
                        int bytes;

                        // Keep listening to the InputStream while connected
                        while (true) {
                                try {

                                        // Read from the InputStream
                                        bytes = mmInStream.read(buffer);

                                        // Send the obtained bytes to the UI 
Activity
                                        
mHandler.obtainMessage(ControlActivity.MESSAGE_READ, bytes, -1,
buffer).sendToTarget();
                                } catch (IOException e) {
                                        Log.e(TAG, "disconnected", e);
                                        connectionLost();
                                        break;
                                }
                        }
                }
             ...
          }


------------------------------handler in Activity
class--------------------------------------------------
        private final Handler mHandler = new Handler() {
                @Override
                public void handleMessage(Message msg) {
                        switch (msg.what) {
                        ...
                        case MESSAGE_READ:
                                byte[] readBuf = (byte[]) msg.obj;
                        ...
                        }
                }
        }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to