1. اختيار طريقة الصرف. وصف API.2. تنفيذ API على جانب 1C.3. البث الإذاعي. نتلقى بيانات الباركود على مثال ATOL Smart.Lite
4. OnKeyUp. احصل على باركود من ماسحة ضوئية مضاهاة لوحة المفاتيحفي هذا الجزء ، أود التركيز على التفاصيل. في جميع البرامج التعليمية التي صادفتها ، يتم وصف الوظائف ببساطة ومكان إضافتها تقريبًا.
لنكتب تطبيقنا الذي يستمع إلى بث الرسائل ويعرضها في نافذة منبثقة. إنشاء مشروع مع
Empty Activity
.
حدد
Package name
"
com.domain.barcodeTest
" مجموعة من الكتب المدرسية. الآن في المشروع سنقوم بإنشاء
package
. بالنسبة لي ، دعوت ذلك ينفع ، لأنه لا أعرف مكان آخر لأخذه. أنها لا تعمل مع الشبكة ، مع قاعدة البيانات سواء. لا يشبه النموذج.
لذلك ، مثل هذا.

تبرز الصورة مكان إنشاء الحزمة. داخل
utils
إنشاء فئة
(Kotlin File/Class
). نختار أنها فئة ، ونحن نسميها
CustomBroadcastReceiver
. رمز الملف الكامل:
CustomBroadcastReceiver.kt package com.domain.barcodeTest.utils import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.widget.Toast class CustomBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) {
أنشأنا فصلنا لتلقي رسائل البث ، وراثة كل شيء من BroadcastReceiver. في ذلك ، قمنا بإعادة تعريف سلوك الوظيفة لتلقي رسالة (
onReceive
). في المستوى الأعلى "
com.domain.barcodeTest
" ، سنقوم بإنشاء
models
حزمة أخرى ،
com.domain.barcodeTest
سنقوم بإنشاء فئة "
Barcode
". رمز الملف الكامل:
barcode.kt package org.innova_it.mws.models data class Barcode( val type: String?, val value: String? )
وبالتالي ، أنشأنا فئة الباركود وإنشاء منشئ لذلك. كل نفس ، Kotlin جيد. الآن يمكننا استخدامه بحرية في فئة
CustomBroadcastReceiver
، يجب أن يختفي الخطأ. نتيجة لذلك ، لدينا الهيكل التالي.

في حزم نقوم بتخزين كائنات مماثلة. إذا تمت ترجمتها إلى 1C ، ثم في حزمة النماذج ، نقوم بتخزين وصف لبيانات 1C. الدلائل والمستندات مع التفاصيل والكائنات التابعة. نقوم أيضًا بتخزين وصف جداول قاعدة البيانات وتنسيق تلقي البيانات عبر الشبكة. التطلع إلى الأمام. فيما يلي مثال نموذجي للنموذج من الجزء السابق في Nomenclature. لا ينطبق على مشروعنا الحالي. لكن من الأسهل الفهم بمثال.
نماذج / wares.kt data class PayLoadWares( val quantity: Int, val wares: List<Ware> )
إذا كنت تتخيل المشروع كهيكل 1C ، فستحتوي كل حزمة على فئات: WaresModel (نموذج دليل البضائع ، WaresManager (مدير دليل البضائع) ، WaresObject (كائن الدليل) ، WaresUI (وحدة النموذج) ، WaresActivity (نموذج). بخلاف 1C ، يمكننا وصف الخصائص والطرق الشائعة لجميع الأدلة في النموذج ، ثم نرثها. في 1C ، تقوم المنصة بهذا ولا يتعين علينا التفكير فيها.
كيف أصف الواجهات في 1C ، لا أعرف حتى. هذا يجب أن يدرس قبل التنوير الكامل. كذلك بدون هذا سيكون من المستحيل.
دعنا نعود إلى طلبنا. الشيء التالي الذي يتعين علينا القيام به هو التوقيع على التطبيق للأحداث التي نحتاجها.
AndroidManifest.xml
ديناميكيًا ، دون استخدام
AndroidManifest.xml
.
للقيام بذلك ، نحتاج إلى إضافة متغير وتجاوز
MainActivity
في
MainActivity
.
إضافة متغير
class MainActivity : AppCompatActivity() {
اشترك في الأحداث. إعادة تعريف سلوك طريقتين في
MainActivity
override fun onResume() { super.onResume() registerReceiver( customBroadcastReceiver, IntentFilter ("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST") ) } override fun onStop() { super.onStop() unregisterReceiver(customBroadcastReceiver) }
أعتقد أن كل شيء شفاف تمامًا هنا. نحن نوقع طلبًا لتلقي الرسائل باستخدام عامل تصفية. بلغة 1C عند تلقي رسالة
(onReceive)
يتم
(onReceive)
، حيث يكون المصدر هو
"com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"
. هذه هي الطريقة التي تستدعي بها الأداة المساعدة الداخلية للعمل مع الماسح الضوئي على ATOL Smart.Lite نفسها. والبيانات لدينا هي
"EXTRA_BARCODE_DECODING_SYMBOLE"
- نوع "EXTRA_BARCODE_DECODING_SYMBOLE"
"EXTRA_BARCODE_DECODING_DATA"
- البيانات نفسها
وفي الواقع يتم معالجة الرسالة. نحن تجميع المدى. نحن نتحقق. لديك سؤال؟ اسأل في التعليقات. هذا كل شيء. الآن نحن مطورون لنظام Android. :)
هذا الجزء مناسب للحصول على النتيجة المرجوة. ولكن بعد ذلك ، عليك أن تذهب وتعلم أساسيات جافا. وعندها فقط أساسيات kotlin.
ملاحظة هنا أود الاتصال بمطوري Android. لدي موقف غريب. اعتدت على تسجيل تطبيق في OnCreate () ، وإلغاء الاشتراك في onStop (). ولكن بعد انتقال التطبيق إلى onPause () ، وعند استئناف onResume () ، تعطل التطبيق عند تلقي رسالة مع وجود خطأ. ما الذي يمكن أن يسبب هذا السلوك؟