टीएसडी पर आवेदन और 1 सी के साथ संचार: एंटरप्राइज़ 8.3 HTTP-Service के माध्यम से। भाग 4 (कीबोर्डकेम के साथ ऑनकेयूपी। एससी स्कैनर)

1. विनिमय विधि का विकल्प। एपीआई विवरण।

2. 1 सी के किनारे पर एपीआई का कार्यान्वयन।

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. onKeyDown और onKeyDown केवल उन क्षेत्रों के लिए काम करते हैं जिनके लिए OnKeyListener को फिर से परिभाषित नहीं किया गया है। और केवल जब इस क्षेत्र में।

तथ्य 3. ATOL Lite.Droid संस्करण 1.1.1 में KeyEvent = KEYCODE_TAB पास नहीं है यदि यह उपसर्ग के रूप में सेट है। न तो उपसर्ग १ में, न ही उपसर्ग २ में। मैंने प्रत्यय में इसकी कोशिश नहीं की। उसकी वहां जरूरत नहीं है।

Fact 4. onKeyUp, onKeyDown, setOnKeyListener - केवल हार्डवेयर क्लिक के लिए सुनो। एक कीबोर्ड, कीबोर्ड इम्यूलेशन के साथ एक स्कैनर, और अजीब तरह से पर्याप्त, स्क्रीन पर बैक बटन भी एक हार्डवेयर बटन (KEYCODE_BACK) है। और टीएसडी पर डिजिटल बटन (भौतिक) नरम बटन हैं। ऐसा क्यों, मुझे समझ नहीं आया :) खैर, ठीक है।

अब थोड़ा सिद्धांत।

इसमें अंतर्निहित बारकोड स्कैनर हैं जो प्रसारण नहीं भेज सकते हैं। और कीबोर्ड इम्यूलेशन के साथ बारकोड स्कैनर हैं। मुझे लगता है कि यह विधि उनके लिए भी उपयुक्त है। दोनों मामलों में, मैं आपको "="(KEYCODE_EQUALS) बराबर उदाहरण के लिए "उपसर्ग" सेट करने की सलाह देता हूं। और प्रत्यय को "CR"(KEYCODE_ENTER) । अन्य सभी प्रत्ययों और उपसर्गों को हटा दें। मानक सेटिंग्स में कीबोर्ड इम्यूलेशन वाले अधिकांश स्कैनर में एक उपसर्ग नहीं होता है, लेकिन वे CRLF (दो वर्ण। कैरिज रिटर्न, लाइन फीड) देने में प्रसन्न होते हैं। ऐसा लगता है कि यह ऐतिहासिक रूप से हुआ।

अब कार्यान्वयन खुद। MainActivity class में, दो वैरिएबल बनाएं। पहला बारकोड वर्णों के संघटन के लिए जिम्मेदार है, दूसरा बारकोड के लिए उपसर्ग और प्रत्यय के बीच की रेखा में एकत्र होने के लिए है।

 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/hi473818/


All Articles