Когда я отправляю строку «M» на устройство, я вызываю функцию времени, откуда я делаю свою строку.Первые три символа, отсутствующие в строке при отправке с android через bluetooth
Код:
` mManButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
man = 1;
clearScreen();
mManButton.setBackgroundResource(R.color.button_pressed);
mStartButton.setBackgroundResource(R.color.button_default);
mCalButton.setBackgroundResource(R.color.button_default);
mTestButton.setBackgroundResource(R.color.button_default);
mLinearButtton.setBackgroundResource(R.color.button_default);
mAutoButton.setBackgroundResource(R.color.button_default);
// Send a message using content of the edit text widget
sendMessage("M");
time();
}
});`
Тогда функция времени() вызывается. Здесь, если мой день - понедельник, тогда переменный день имеет значение 1. Это означает, что в этой функции я создаю строку, в которой есть значения формата даты. Эта строка начинается с «A» и заканчивается на «B».
Код:
private void time()
{
int day = 0;
Date now = new Date();
String sdf = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(now);
switch(sdf){
case ("Monday"):
day = 1;
break;
case("Tuesday"):
day = 2;
break;
case ("Wednesday"):
day = 3;
break;
case ("Thursday"):
day = 4;
break;
case("Friday"):
day = 5;
break;
case ("Saturday"):
day = 6;
break;
case("Sunday"):
day = 7;
break;
}
int mm = Calendar.getInstance().get(Calendar.MINUTE);
int HH = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
int dd = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
int MM = Calendar.getInstance().get(Calendar.MONTH)+1;
int yy = Calendar.getInstance().get(Calendar.YEAR)%100;
if(mm<10) {
String time1 = "A" + "0" + mm + HH + "0" + day + dd + MM + yy + "B"; //suppose time1 = A041303211216B
tv7.setText("Please Wait..");
int p = 0;
while (p < time1.length())
{
char zx = time1.charAt(p);
String xz = String.valueOf(zx);
sendMessage(xz);
p++;
}
}
else if(mm>=10) {
String time2 = "A" + mm + HH + "0" + day + dd + MM + yy + "B"; **//suppose time2 = A151303211216B**
tv7.setText("Please Wait..");
int k = 0;
while (k < time2.length())
{
char zx = time2.charAt(k);
String xz = String.valueOf(zx);
sendMessage(xz);
k++;
}
}
}
Когда строка создается посылает каждые символы строки в SendMessage().
Код:
private void sendMessage(String message) {
// Check that we're actually connected before trying anything
if (mChatService.getState() !=
com.example.hasani.bluetoothterminal.BluetoothChatService.STATE_CONNECTED) {
Toast.makeText(getActivity(), R.string.not_connected, Toast.LENGTH_SHORT).show();
mStartButton.setBackgroundResource(R.color.button_default);
mCalButton.setBackgroundResource(R.color.button_default);
mTestButton.setBackgroundResource(R.color.button_default);
mManButton.setBackgroundResource(R.color.button_default);
mAutoButton.setBackgroundResource(R.color.button_default);
return;
}
// Check that there's actually something to send
if (message.length() > 0) {
// Get the message bytes and tell the BluetoothChatService to write
byte[] send = message.getBytes();
mChatService.write(send);
// Reset out string buffer to zero and clear the edit text field
mOutStringBuffer.setLength(0);
}
}
Функция записи.
Код:
public void write(byte[] out) {
// Create temporary object
ConnectedThread r;
// Synchronize a copy of the ConnectedThread
synchronized (this) {
if (mState != STATE_CONNECTED) return;
r = mConnectedThread;
}
// Perform the write unsynchronized
r.write(out);
}
Wite в ConnectedThread Код:
public void write(byte[] buffer) {
try {
mmOutStream.write(buffer);
// Share the sent message back to the UI Activity
mHandler.obtainMessage(com.example.hasani.bluetoothterminal.Constants.MESSAGE_WRITE, -1, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "Exception during write", e);
}
}
Как есть роль обработчика в нем. Проблема заключается в отладке шаг за шагом, каждый символ отправляется на другое устройство, и это устройство получает каждую строку от «А» до «В», поэтому проблем нет.
Но когда я запустил приложение для Android, после отправки «М» вызывается функция времени() и отправляется строка, но первые три символа строки i.e; «Amm» не принимается устройством. Я все еще не понимаю, что вызывает проблему. Пожалуйста, помогите !. Будет оценено. Спасибо!
Предполагая, что для соединения требуется несколько миллисекунд, 'if (mState! = STATE_CONNECTED) return;' будет отбрасывать символы, поскольку попытки повторить не предпринимаются. –
Подсказка: все ВЕРХНИЕ СЛУЧАЯ рассматривается как СКРИМАНИЕ многими людьми. Таким образом, считается грубым. Лучше избегайте этого и переработайте свой заголовок Теперь. – GhostCat
@ KenY-N Итак, я должен удалить эту часть? Будет ли это иметь муравь. Я новичок в Android, поэтому я немного смущен. Спасибо. –