2010-11-18 41 views
1

J'utilise l'exemple d'application Bluetooth Chat du site Web android. Je veux envoyer un long message dans un format particulier (mentionné ci-dessous dans le code) et le recevoir de l'autre côté et l'afficher sur mon téléphone (HTC Desire). Je vais analyser ce message plus loin, extraire quelques choses et l'utiliser pour mon application.Est-ce que les bugs/problèmes dans bluetooth Le profil SPP de HTC Desire affecte l'application Bluetooth Chat?

Je ne suis pas en mesure de recevoir tous les caractères dans le message ci-dessus (quelques caractères sont omis au hasard). Est-ce à cause d'un problème dans la méthode "read" InputStream de la socket bluetooth ou que le profil bluetooth SPP a des bugs et des problèmes dans HTC Desire ou pour toute autre raison? J'ai essayé l'InputStream pour être un tampon d'octets, un tampon de char, puis pour créer une chaîne hors du contenu de la mémoire tampon (en utilisant new String, StringBuilder et StringBuffer). Mais de toute façon je ne suis pas en mesure d'afficher le message entier dans le format requis sur mon téléphone.

Toute aide ou suggestion est grandement appréciée.

Merci pour votre temps

Cheers, Madhu Nandan

/** * Ce fil court lors d'une connexion avec un appareil distant. * Il gère toutes les transmissions entrantes et sortantes. */

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); 

Répondre

0

Je trouve la solution au problème d'un autre poste sur stackoverflow je me trouvais à lire: Data Transmisison error using SPP over Bluetooth on Android Le correctif est ne passe pas le tampon d'octets à la classe principale et puis construis la chaîne. Au lieu de construire la chaîne dans la même classe où vous recevez le tampon d'octets et passez la chaîne. Cela fonctionne pour moi de cette façon.

Mais maintenant j'ai un autre petit problème. Je communique via Windows Hypertermial avec l'application Bluetooth Chat. Quand j'envoie un message comme celui-ci <MSG><N>msgName<!N><V>msgValue<!V><!MSG> et que je le reçois sur mon téléphone, je reçois tous les caractères mais ils sont affichés sur plusieurs lignes. Je veux comparer le message reçu pour le format ci-dessus, puis extraire le msgName et msgValue pour une utilisation ultérieure dans mon application. Comme le message reçu s'affiche sur plusieurs lignes, la comparaison échoue bien que j'envoie le message dans le bon format.

Une idée pourquoi cela se produit? Merci pour toutes les suggestions et le temps passé sur ma question.

Cheers,

Madhu