Verdetto
العربية

المسح من تطبيق آخر

يستجيب Verdetto لثلاث نوايا ومشاركة واحدة. لا يحتاج شيء هنا إلى إذن أو مكتبة أو مفتاح. يحتفظ الشخص بكل فحص أمان وكل إعداد في التطبيق؛ ويستلم تطبيقك نص الرمز لحظة تأكيده.

النوايا

Actionالمرشِّح في الـ manifestما الذي يحدثالنتيجة
com.google.zxing.client.android.SCANنعم، النوايا الضمنية تعمل.يفتح الماسح. أول رمز يثبّته الشخص يُعاد، كما كان يفعل ZXing Barcode Scanner.RESULT_OK مع SCAN_RESULT وSCAN_RESULT_FORMAT
app.scanner.action.SCANنعم.يفتح الماسح. إذا بُدئ من أجل نتيجة (result launcher أو startActivityForResult) فإنه يعيد الرمز بالطريقة نفسها؛ وإذا بُدئ عاديًا فإنه يفتح التطبيق على الماسح فقط.RESULT_OK مع الإضافتين عند البدء من أجل نتيجة
app.scanner.action.CARDبلا مرشِّح: نية صريحة بالحزمة com.verdettoqr.scanner فقط.يفتح محرّر بطاقة الاتصال الخاصة بالشخص، أي الرمز الذي يعرضه لمشاركة بياناته. مخصص لأدوات التطبيق واختصاراته؛ ويمكن لتطبيق آخر استدعاؤه، لكن لا يعود شيء.لا شيء
android.intent.action.SEND مع image/*نعم.يفكّ صورة: يعرض التطبيق ورقة النتيجة للرموز الموجودة فيها.لا شيء

يمكن للشخص إيقاف إعادة النتائج في الإعدادات ضمن «تسليم النتائج إلى تطبيقات أخرى» («عندما يطلب تطبيق ما مسحًا، يعود الرمز إليه»)، وهو مفعّل افتراضيًا. وعند إيقافه، يفتح أيٌّ من إجراءي المسح الماسح كتشغيل عادي ويستلم مشغّلك RESULT_CANCELED عندما يخرج الشخص. والرجوع من الماسح يعطي RESULT_CANCELED أيضًا.

لا تُقرأ حاليًا أي إضافات في الطلب: لا SCAN_MODE ولا SCAN_FORMATS ولا PROMPT_MESSAGE ولا SAVE_HISTORY ولا غيرها. يقرأ الماسح كل ترميز يعرفه في كل استدعاء. والرمز الذي تعلّمه فحوص التطبيق يُعاد مع ذلك؛ يرى الشخص التحذير أولًا ثم يقرر.

النتيجة

  • SCAN_RESULT (String): محتوى الرمز، أي البايتات التي حملها الرمز بالضبط، مفكوكة كنص (UTF-8 حيث يسمح الترميز، وإلا فمجموعة محارف الترميز نفسه).
  • SCAN_RESULT_FORMAT (String): الترميز بأحرف كبيرة مع شرطات سفلية، بأسماء ZXing حيث توجد. يُسلَّم حاليًا: QR_CODE, MICRO_QR_CODE, RMQR_CODE, DATA_MATRIX, AZTEC, PDF417, MAXICODE, HAN_XIN, EAN_13, EAN_8, UPC_A, UPC_E, CODE_128, CODE_39, CODE_93, CODABAR, ITF, DATABAR, DATABAR_EXPANDED, DATABAR_LIMITED, DX_FILM_EDGE، إلى جانب الترميزات الأخرى التي تضيفها مفكّكات التطبيق الخاصة، بالكتابة نفسها (الاسم المعروض في ورقة النتيجة بأحرف كبيرة، مع تحويل المسافات والشرطات إلى شرطات سفلية).

لا ينتقل شيء آخر: لا صورة ولا موقع ولا سجل.

Kotlin

private val scan = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val text = result.data?.getStringExtra("SCAN_RESULT")
        val format = result.data?.getStringExtra("SCAN_RESULT_FORMAT")
        // use text and format
    }
}

fun startScan() {
    val intent = Intent("app.scanner.action.SCAN")
    if (intent.resolveActivity(packageManager) != null) scan.launch(intent)
    else startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(GET_VERDETTO)))
}

// the store page, with the developers referrer
private const val GET_VERDETTO =
    "https://play.google.com/store/apps/details?id=com.verdettoqr.scanner&referrer=utm_source%3Ddevelopers%26utm_medium%3Ddocs%26utm_campaign%3Ddevelopers"

على Android 11 وما بعده، أضف الاستعلام إلى الـ manifest كي يتمكن resolveActivity من رؤية التطبيق:

<queries>
    <intent>
        <action android:name="app.scanner.action.SCAN" />
    </intent>
</queries>

Java

private final ActivityResultLauncher<Intent> scan = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(), result -> {
            if (result.getResultCode() == Activity.RESULT_OK && result.getData() != null) {
                String text = result.getData().getStringExtra("SCAN_RESULT");
                String format = result.getData().getStringExtra("SCAN_RESULT_FORMAT");
                // use text and format
            }
        });

void startScan() {
    Intent intent = new Intent("app.scanner.action.SCAN");
    if (intent.resolveActivity(getPackageManager()) != null) scan.launch(intent);
    else startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(GET_VERDETTO)));
}

إجراء ZXing

الكود المكتوب لـ ZXing Barcode Scanner يستمر في العمل: أرسل com.google.zxing.client.android.SCAN بالطريقة نفسها واقرأ الإضافتين نفسيهما. وإذا استجاب له أكثر من ماسح على الهاتف، يسأل النظام الشخص أيّها يستخدم؛ وإرسال النية إلى الحزمة com.verdettoqr.scanner يتجاوز ذلك.

ما يراه الشخص

يفتح الماسح كالمعتاد، بفحوصه الخاصة. وعندما يثبت رمز، يعيده التطبيق ويُغلَق؛ لا يظهر شيء من عندك على الشاشة، ولا يمسّ الاستدعاء شيئًا من عند الشخص (السجل، الإعدادات، قائمة الأمان).

الاختبار على هاتف بلا التطبيق. صفحة المتجر مع مُحيل المطوّرين، وهي العنوان نفسه الذي يفتحه البديل في الأمثلة: احصل عليه من Google Play. مصدر هذه الصفحة هو ملف INTENT.md الخاص بالتطبيق؛ وعند اختلافهما فمستودع التطبيق هو الصحيح وهذه الصفحة متأخرة.