Я использую пример приложения 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);