Hello!
Je suis confronté à un problème qui est peut-être plus un problème Android que "Delphien".
Mon objectif:
Capturer le code barre lu par une douchette bluetooth dans une app Android développée en Delphi FMX (Delphi Rio 10.3.3).
Principe de fonctionnement:
- La douchette transmet le code barre lu comme une suite de caractères saisies au clavier.
- La douchette compatible Windows/Android est configurée pour fournir le code sous la forme: 1 caractère pour indiquer le début du code barre ("!"), un caractère pour indiquer le type de code barre ("c" pour indiquer qu'il s'agit d'un code barre EAN8), les caractères codés dans le code barre (8 caractères pour un EAN8) et les caractères CR LF pour indiquer la fin du code barre.
- L'app récupère chaque caractère reçu sur un event OnKeyDown et forme le code barre en récoltant les caractère un à un (d'où un caractère qui indique le début du code barre et un caractère de fin du code barre).
Problème rencontré
Sous Windows et sous Android, on n'obtient pas le même résultat.
Si on lit un code barre de type EAN8 (=8 chiffres):
Sous Windows, on obtient: !C20010003 CR LF (cela correspond à la configuration de la douchette)
Sous Android, rien ne va plus:
1. CR et LF ne sont pas détectés (je crois me souvenir que Unix ne traite pas les CR et autre LF)
2. Si on visualise les caractères saisis dans un Tmemo en affichant la valeur du string qui a capturé un à un les caractères reçus, on a !C20010003 (sans CR et LF)
3. Je contrôle le nombre de caractères reçus en contrôlant length(string)=21 (21 et pas 10 qui serait la longueur d'un string "!C20010003"!!!)
4. Je vérifie donc le code ASCII des caractères reçus au niveau de l'event onKeyDown:
33 99 0 50 0 48 0 48 0 49 0 48 0 48 0 48 0 51 0 0 0
Ce qui correspond à:
! C 2 0 0 1 0 0 0 3
On a le bon code ASCII suivi d'un 0 après chaque caractère et un 0 final en lieu et place de CR LF.
Conclusion
Sous Android, l'event reçoit 21 caractères, la string montre 10 caractères mais indique une longueur de 21 caractères et ajoute à la fin un "0" qui correspond à "je ne sais pas quoi".
Sous windows, l'event reçoit 12 caractères (les 10 caractères visibles + CR + LF), la longueur du string=12 et le string montre les 10 caractères visibles.
Est-ce que quelqu'un a une expérience dans le traitement des string au niveau de Android, une explication sur le fonctionnement obtenu sous Android et une solution pour détecter les CR et LF envoyés sous Android?
Merci d'avance à tous ceux qui pourront m'éclairer...
Partager