Lorsque j'envoie une chaîne "M" à la fonction Device I call time d'où je fais ma chaîne.Les trois premiers caractères manquant de la chaîne lors de l'envoi à partir d'android via bluetooth
code:
` 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();
}
});`
Ensuite, la fonction time() est appelée. Ici, si mon jour est lundi, le jour variable est défini sur 1. Cela signifie que dans cette fonction, je crée une chaîne contenant des valeurs de format de date. Cette chaîne commence à partir de "A" et se termine par "B".
code:
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++;
}
}
}
Lorsque la chaîne est créée j'envoie chaque caractère de la chaîne à sendMessage().
code:
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);
}
}
La fonction d'écriture.
code:
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);
}
Le Wite dans ConnectedThread code:
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);
}
}
Comme il y a un rôle de gestionnaire en elle. Le problème est lors du débogage étape par étape, chaque caractère est envoyé à l'autre périphérique et ce périphérique reçoit chaque chaîne de "A" à "B", il n'y a donc pas de problème.
Mais quand je lance mon application android, après avoir envoyé "M", la fonction time() est appelée et la chaîne est envoyée mais les trois premiers caractères de la chaîne i.e; "Amm" n'est pas reçu par l'appareil. Je ne comprends toujours pas ce qui cause le problème. S'il vous plaît, aidez! Sera apprécié. Je vous remercie!
En supposant que cela prenne quelques millisecondes pour se connecter, 'if (mState! = STATE_CONNECTED) retournera: 'abandonnera les caractères car il n'y a aucune tentative de réessayer. –
Indice: tous les MAJUSCULES sont considérés comme du SCREAMING par de nombreuses personnes. Donc considéré comme impoli. Mieux vaut éviter cela et retravailler votre titre maintenant. – GhostCat
@ KenY-N Alors dois-je supprimer cette partie? Cela fera-t-il la différence entre les fourmis Je suis nouveau dans Android alors je suis un peu confus. Je vous remercie. –