قاعدة التنفيذ
تعامل مع ScanManager كمورد جهاز له مالك صريح. افتحه، وحدد وضع الإخراج المقصود، وقم بتسجيل جهاز استقبال فك التشفير، والتحقق من صحة كل حمولة، ثم قم بإلغاء التسجيل وإغلاقه بشكل حتمي. تأكيد سلوك الطريقة في عينة غرض الإنتاج.
قم بإعداد خط أساس قابل للتكرار SDK.
قم بتعبئة عنصر SDK المعتمد من خلال عملية التنزيل التي يتحكم فيها المطور. قم بتسجيل نسخته وSHA-256 جنبًا إلى جنب مع إصدار التطبيق وسجل الجهاز.
احتفظ بواجهات برمجة تطبيقات البائع خلف محول الماسح الضوئي حتى يمكن اختبار منطق الأعمال بدون أجهزة ويمكن استبدال تطبيق التقاط آخر.
- تمت الموافقة على مصدر SDK فقط
- تم تسجيل تجزئة القطعة الأثرية
- تم تحديد حدود المحول
- تم إنشاء مصفوفة الجهاز
امتلك دورة حياة الماسح الضوئي مرة واحدة
المستندات المرجعية API هي وظائف openScanner، وCloseScanner، وstartDecode، وstopDecode، ووضع الإخراج. قرر ما إذا كان النشاط أو الخدمة الأمامية أو أي مكون آخر على مستوى التطبيق يملك تلك الاستدعاءات.
تجنب فتح شاشات متعددة للماسح الضوئي بشكل مستقل. اجعل الإيقاف والإغلاق آمنًا للتكرار وإبراز قيم الإرجاع الفاشلة في الحالة التشخيصية دون تسجيل حمولات الرمز الشريطي.
- مالك مورد واحد
- تنظيف عاجز
- تمت ملاحظة قيم الإرجاع
- لا توجد حمولات في السجلات العادية
التحقق من صحة حمولة البث
يمكن أن يتضمن بث فك التشفير الناجح بيانات أولية وسلسلة تم فك تشفيرها وطول ونوع الرمز الشريطي. تحقق من الإجراء وقابلية البطلان والطول قبل تسليم حدث المجال.
اختر تمثيلاً رسميًا واحدًا. إذا كان التشفير مهمًا، فاحتفظ بالبايتات الأولية وفك التشفير ضمن مجموعة أحرف صريحة بدلاً من افتراض أن كل رمز شريطي هو ASCII بسيط.
- العمل يطابق تماما
- الطول متوافق مع الحمولة
- سياسة الترميز موثقة
- حارس حدث مكرر
الانتقال من العرض التجريبي إلى دليل الإنتاج
نجاح الترجمة يثبت توافق المصدر فقط. قم بتشغيل التطبيق على كل طراز ونظام تشغيل وبرامج ثابتة مقصودة مع تسميات تمثيلية وسيناريوهات دورة الحياة.
سجل إعدادات الماسح الضوئي ووضع الإخراج بعد التكوين. اختبار الانحدار بعد تغيير البرامج الثابتة أو SDK أو التطبيق أو سياسة MDM.
- هيئة المسح التمثيلية
- دورات النوم واستئناف
- الحالات السريعة والطويلة
- سجل اختبار الإصدار
خريطة حالة دورة حياة ScanManager
حافظ على توافق مكالمات الموارد مع حالة التطبيق التي يمكن ملاحظتها.
| الدولة | الإجراء المطلوب | استجابة الفشل |
|---|---|---|
| البدء | قم بإنشاء ScanManager وافتح الماسح الضوئي | منع الالتقاط وإظهار حالة التشخيص |
| جاهز | ضبط وضع الإخراج وتسجيل المتلقي | اقرأ مرة أخرى أو أبلغ عن فشل التكوين |
| التقاط | ابدأ في فك التشفير أو قبول أحداث التشغيل | المهلة والتوقف والسماح بإعادة المحاولة الخاضعة للرقابة |
| متوقف مؤقتًا | إيقاف فك التشفير وإلغاء التسجيل كما هو مصمم | منع التسليم إلى سير العمل غير النشط |
| دمرت | أغلق الماسح الضوئي مرة واحدة | سجل نتيجة التنظيف بدون بيانات حساسة |
مثال على الحد الأدنى من دورة الحياة Kotlin.
تحقق من ثوابت وضع الإخراج وعلامات جهاز الاستقبال Android وملكية دورة الحياة مقابل SDK الدقيق والهدف API وبنية التطبيق.
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.device.ScanManager
import androidx.appcompat.app.AppCompatActivity
class UrovoScannerActivity : AppCompatActivity() {
private val scanner = ScanManager()
private var receiverRegistered = false
private val decodeReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action != ScanManager.ACTION_DECODE) return
val raw = intent.getByteArrayExtra(ScanManager.DECODE_DATA_TAG) ?: return
val declaredLength = intent.getIntExtra(ScanManager.BARCODE_LENGTH_TAG, raw.size)
val type = intent.getByteExtra(ScanManager.BARCODE_TYPE_TAG, 0)
val value = intent.getStringExtra(ScanManager.BARCODE_STRING_TAG)
?: raw.copyOf(declaredLength.coerceIn(0, raw.size)).toString(Charsets.UTF_8)
onValidatedScan(value, type)
}
}
override fun onStart() {
super.onStart()
check(scanner.openScanner()) { "Scanner could not be opened" }
// Confirm the broadcast-output constant in the SDK version you ship.
check(scanner.switchOutputMode(0)) { "Output mode could not be set" }
registerReceiver(decodeReceiver, IntentFilter(ScanManager.ACTION_DECODE))
receiverRegistered = true
}
override fun onStop() {
scanner.stopDecode()
if (receiverRegistered) unregisterReceiver(decodeReceiver)
receiverRegistered = false
scanner.closeScanner()
super.onStop()
}
private fun onValidatedScan(value: String, type: Byte) {
// Route a sanitized domain event; do not log sensitive barcode values.
}
}قائمة التحقق من صحة ScanManager
قم بإرفاق هذا السجل بالتطبيق المعتمد وخط الأساس للجهاز.
- 01
تم تسجيل إصدار SDK وSHA-256
- 02
تم تسجيل الجهاز SKU ونظام التشغيل والبرامج الثابتة
- 03
يفتح الماسح الضوئي ويغلق بشكل متكرر
- 04
قراءة وضع الإخراج أو تأكيده
- 05
تتطابق دورة حياة جهاز الاستقبال مع واجهة المستخدم النشطة
- 06
تم فحص الإضافات الأولية والسلسلة والطول والنوع
- 07
تم اختبار جميع الرموز المطلوبة
- 08
تم اختبار عمليات المسح الطويلة والتالفة والسريعة
- 09
تم اختبار وضع السكون وإعادة التشغيل ووضع الكشك MDM.
- 10
لم يتم تسجيل أي بيانات حساسة للرمز الشريطي
الأسئلة المتداولة
ماذا يعني SwitchOutputMode(0)؟
يوثق المرجع API تبديل وضع الإخراج، ولكن يجب التحقق من الثوابت والسلوك في إصدار SDK الدقيق والبرامج الثابتة للجهاز. لا تقم بنسخ ثابت العينة إلى الإنتاج دون التحقق.
هل يجب إغلاق الماسح الضوئي في وضع onPause أو onStop؟
اختر ملكية دورة الحياة استنادًا إلى بنية التطبيق وما إذا كان يمكن استمرار المسح عند حجبه جزئيًا. الشرط المهم هو مالك واحد، والتنظيف الحتمي والسلوك الذي تم اختباره.
هل يمكن استخدام هذه العينة على كل جهاز UROVO ؟
لا. إنه مخطط للتحقق من الصحة يعتمد على ScanManager v4.1.0326. قم بتجميعه وتشغيله على كل طراز ونظام تشغيل وبرامج ثابتة مقصودة قبل الإصدار.
الأدلة والقيود
SDK - عينة مدعومة بالمرجع / لم يتم التحقق من صحتها في كل تكوين مستهدف
الكود توضيحي ويستدعي عمدًا الثوابت الخاصة بالإصدار وسياسة جهاز الاستقبال Android للتحقق.
تمت المراجعة: 2026-08-10
- UROVO Android SDK الإصدار 4.1.0326 مرجع ScanManager API
- UROVO نموذج مشروع ScanManager في تصدير SDK المعتمد
- Android وثائق دورة حياة التطبيق ومستقبل البث

