تطبيق على TSD والتواصل مع 1C: Enterprise 8.3 من خلال HTTP-Service. الجزء 4 (OnKeyUp. SC الماسح الضوئي مع مضاهاة لوحة المفاتيح)

1. اختيار طريقة الصرف. وصف API.

2. تنفيذ API على جانب 1C.

3. البث الإذاعي. نحصل على البيانات

4. OnKeyUp. ماسح الباركود مع مضاهاة لوحة المفاتيح


كان من المفترض أن يكون هذا المقال هو الأقصر. لكن الشيطان هو في التفاصيل. وهنا بعض الحقائق.

الحقيقة 1. إذا كان لدينا العديد من حقول EditText في النموذج ، OnKeyListener تجاوز OnKeyListener ، فإن onKeyUp و onKeyDown مظلمان ولم يعد يتم استدعاءهما. التعليمات البرمجية.

 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) 

يتبع
حقيقة 2. onKeyUp و onKeyDown فقط لتلك الحقول التي لم يتم إعادة تعريف OnKeyListener لها. وفقط عندما يكون في هذا المجال.

حقيقة 3. لا يمر ATOL Lite.Droid في الإصدار 1.1.1 KeyEvent = KEYCODE_TAB إذا تم تعيينه كبادئة. لا في prefix1 ، ولا في prefix2. لم أحاول ذلك في اللاحقة. ليست هناك حاجة هناك.

حقيقة 4. onKeyUp ، onKeyDown ، setOnKeyListener - الاستماع فقط لنقرات الأجهزة. لوحة المفاتيح ، الماسح الضوئي مع مضاهاة لوحة المفاتيح ، وبشكل غريب بما فيه الكفاية ، فإن زر الرجوع على الشاشة هو أيضًا زر جهاز (KEYCODE_BACK). والأزرار الرقمية (المادية) على TSD هي أزرار لينة. لماذا لم أفهم :) حسنًا ، حسنًا.

الآن نظرية صغيرة.

هناك ماسحات الباركود المضمنة التي لا يمكن إرسال البث. وهناك ماسحات الباركود مع مضاهاة لوحة المفاتيح. أعتقد أن هذه الطريقة مناسبة لهم أيضًا. في كلتا الحالتين ، أنصحك بتعيين "البادئة" على سبيل المثال تساوي "="(KEYCODE_EQUALS) . واستبدل اللاحقة بـ "CR"(KEYCODE_ENTER) . إزالة جميع اللواحق والبادئات الأخرى. لا تحتوي معظم الماسحات الضوئية التي تحتوي على محاكاة لوحة المفاتيح في الإعدادات القياسية على بادئة ، لكنهم سعداء بإعطاء CRLF (حرفين. إرجاع حرف ، تغذية سطر). يبدو أنه حدث تاريخيا.

الآن التنفيذ نفسه. في فئة MainActivity ، قم بإنشاء متغيرين. الأول مسؤول عن تسلسل أحرف الباركود ، والثاني هو جمع الباركود في سطر بين البادئة واللاحقة.

 val barcodeStringBuilder = StringBuilder() var isReadingBarcode = false 

وفي الفصل تحتاج إلى تجاوز وظيفة 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) } 

هذا كل شيء. كما هو الحال دائمًا ، التعليقات والإضافات مرحب بها.

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


All Articles