Влияют ли ошибки / проблемы в профиле bluetooth SPP в HTC Desire на приложение Bluetooth Chat? - PullRequest
1 голос
/ 18 ноября 2010

Я использую пример приложения Bluetooth Chat с сайта Android.Я хочу отправить длинное сообщение в определенном формате (упомянуто ниже в коде) и получить его на другой стороне и отобразить на моем телефоне (HTC Desire).Я проанализирую это сообщение далее, извлеку несколько вещей и использую его для своего приложения.

Я не могу получить все символы в приведенном выше сообщении (некоторые символы случайно пропускаются).Это из-за проблемы в методе считывания InputStream разъема Bluetooth или из-за того, что в профиле Bluetooth SPP есть ошибки и проблемы в HTC Desire или по какой-либо другой причине?Я попытался InputStream быть буфером байтов, буфером символов и затем создать строку из содержимого буфера (используя обычные новые String, StringBuilder и StringBuffer).Но почему-то я не могу отобразить все сообщение в нужном формате на моем телефоне.

Любая помощь / предложение очень ценится.

Спасибо за ваше время

Приветствия, Мадху Нандан

/ ** * Этот поток запускается во время соединения с удаленным устройством.* Он обрабатывает все входящие и исходящие передачи.* /

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");
        char[] buffer = new char[1024];
        int bytes;  
        //Writer writer = new StringWriter();

        // Keep listening to the InputStream while connected
        while (true) {
            try {
                // Read from the InputStream
             Reader reader = new BufferedReader(
                        new InputStreamReader(mmInStream, "UTF-8"));
                //int n;
                while ((bytes = reader.read(buffer)) != -1) 
                 //writer.write(buffer, 0, bytes);
                //String str = writer.toString();

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

case MESSAGE_READ:             
         char[] readBuf = (char[]) msg.obj;             
            // construct a string from the valid bytes in the buffer 
         //StringBuffer sb = new StringBuffer("");
         String Incoming = new String (readBuf, 0, msg.arg1);
         StringBuilder sb = new StringBuilder("");             
            String readMessage = sb.append(Incoming).toString();             
         //String readMessage = new String(sb.append(Incoming));
            mConversationArrayAdapter.add(mConnectedDeviceName+":  " + readMessage);  
            mTitle.setText(readMessage);
            //String readMessage = new String(sb);
            //Make sure there is a received message. Extract it's name and value
            //int msgLen = readMessage.length();
            //if( msgLen!= 0)

            //Message format: <MSG><N>xxx<!N><V>yyy<!V><!MSG> (xxx-name of the  //message, yyy-value of the message)
            if (readMessage.matches("<MSG><N>.*<!N><V>.*<!V><!MSG>"))                
             extractData(readMessage); 
            //else mTitle.setText(R.string.floor_it); 
            sb.setLength(0);

1 Ответ

0 голосов
/ 19 ноября 2010

Я нашел решение этой проблемы в другом посте о стековом потоке, который мне довелось прочитать: Ошибка передачи данных при использовании SPP через Bluetooth на Android Исправление - не передавать байтовый буфер в основной класс а затем построить строку. Вместо этого создайте строку в том же классе, где вы получаете байтовый буфер и передаете строку. У меня так работает.

Но теперь у меня есть еще одна маленькая проблема. Я общаюсь через Windows Hypertermial с помощью приложения Bluetooth Chat. Когда я отправляю подобное сообщение <MSG><N>msgName<!N><V>msgValue<!V><!MSG> и получаю его на свой телефон, я получаю все символы, но они отображаются в несколько строк. Я хочу сравнить полученное сообщение для вышеуказанного формата, а затем извлечь msgName и msgValue для дальнейшего использования в моем приложении. Поскольку полученное сообщение отображается в несколько строк, сравнение не удается, хотя я отправляю сообщение в правильном формате.

Есть идеи, почему это происходит? Спасибо за любые предложения и время, потраченное на мой вопрос.

Приветствия

Мадху

...