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