Application sur TSD et communication avec 1C: Enterprise 8.3 via HTTP-Service. Partie 4 (scanner OnKeyUp. SC avec émulation clavier)

1. Le choix de la méthode d'échange. Description de l'API.

2. Implémentation de l'API côté 1C.

3. BroadcastReceiver. Nous obtenons les données

4. OnKeyUp. Scanner de codes à barres avec émulation de clavier


Cet article était censé être le plus court. Mais le diable est dans les détails. Voici quelques faits.

Fait 1. Si nous avons plusieurs champs EditText sur le formulaire et que nous OnKeyListener , onKeyUp et onKeyDown sont ombrés et ne sont plus appelés. Code

 class MainActivity : AppCompatActivity() { var keyListener: View.OnKeyListener = View.OnKeyListener { _, _, _ -> true} override fun onCreate(savedInstanceState: Bundle?) { val editBarcode = findViewById(R.id.editBarcode) editBarcode.setOnKeyListener (keyListener) val editQuantity: EditText = findViewById(R.id.editQuantity) editQuantity.setOnKeyListener(keyListener) 

Il s'ensuit
Fait 2. onKeyUp et onKeyDown ne fonctionnent que pour les champs pour lesquels OnKeyListener n'est pas redéfini. Et seulement dans ce domaine.

Fait 3. ATOL Lite.Droid dans la version 1.1.1 ne passe pas KeyEvent = KEYCODE_TAB s'il est défini comme préfixe. Ni dans le préfixe1, ni dans le préfixe2. Je ne l'ai pas essayé avec le suffixe. Il n'est pas nécessaire là-bas.

Fait 4. onKeyUp, onKeyDown, setOnKeyListener - écoutez uniquement les clics matériels. Un clavier, un scanner avec émulation de clavier, et curieusement, le bouton de retour à l'écran est également un bouton matériel (KEYCODE_BACK). Et les boutons numériques (physiques) du TSD sont des boutons programmables. Pourquoi, je n'ai pas compris :) Bon, d'accord.

Maintenant, une petite théorie.

Il existe des scanners de codes-barres intégrés qui ne peuvent pas envoyer de diffusion. Et il existe des scanners de codes à barres avec émulation de clavier. Je pense que cette méthode leur convient également. Dans les deux cas, je vous conseille de définir le "préfixe" par exemple égal à "="(KEYCODE_EQUALS) . Et remplacez le suffixe par "CR"(KEYCODE_ENTER) . Supprimez tous les autres suffixes et préfixes. La plupart des scanners avec émulation de clavier dans les paramètres standard n'ont pas de préfixe, mais ils sont heureux de donner CRLF (deux caractères. Retour chariot, saut de ligne). On dirait que c'est arrivé historiquement.

Maintenant l'implémentation elle-même. Dans la classe MainActivity, créez deux variables. Le premier est responsable de la concaténation des caractères de code à barres, le second est à collecter le code à barres sur une ligne entre le préfixe et le suffixe.

 val barcodeStringBuilder = StringBuilder() var isReadingBarcode = false 

Et dans la classe, vous devez remplacer la fonction onKeyUp .

 override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean { // ,  ().   .         . if (event?.keyCode == KeyEvent.KEYCODE_EQUALS ){ barcodeStringBuilder.clear() isReadingBarcode = true return true } //     .  ,      . if (isReadingBarcode) { barcodeStringBuilder.append(event?.getUnicodeChar()?.toChar()) } //    ,      .       . if ((event?.keyCode == KeyEvent.KEYCODE_ENTER) && isReadingBarcode) { Log.d("BarcodeDebug", "$barcodeStringBuilder") setTextBarcode(barcodeStringBuilder.toString()) //  .    . isReadingBarcode = false return true } //     . return super.onKeyUp(keyCode, event) } 

C’est tout. Comme toujours, les commentaires et ajouts sont les bienvenus.

Source: https://habr.com/ru/post/fr473818/


All Articles