سؤال

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

finish = (Button) findViewById(R.id.finishButton);
        finish.setOnClickListener(new OnClickListener() {
            public void onClick(View viewParam) {

                /*Prompt the user to scan the barcode */
                new AlertDialog.Builder(Visit.this)
                .setMessage("Please Scan the clients barcode to complete the visit")
                .setPositiveButton("Scan Barcode", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Start the scan application
                        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
                        startActivityForResult(intent, 0);
                    }
                })

                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //Execute some method call
                        Toast.makeText(Visit.this, "Scan declined...", Toast.LENGTH_SHORT).show();
                    }
                })
                .show();
                /* End of Scan prompt */
            }
        });

يعين الرمز أعلاه مستمعًا على زر يسمى finished. عند النقر فوق الزر ، يعرض موجهًا يطلب من المستخدم مسح الباركود أو الإلغاء.

النقر على مسح الرمز الشريطى زر يبدأ نشاط جديد يبدأ المسح.

لديّ الرمز التالي إعداد لقراءة نتيجة المسح في الإرجاع من الفحص:

/* Return from scanning barcode */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
;
      if (resultCode == Activity.RESULT_OK && requestCode == 0) {
        Bundle extras = data.getExtras();
        String result = extras.getString("SCAN_RESULT");
      }
      Toast.makeText(Visit.this, "request code: "+requestCode+" result code = "+resultCode+ "\nRESULT_OK: "+Activity.RESULT_OK, Toast.LENGTH_SHORT).show();
    }

أي ببساطة (في الوقت الحالي) يخرج النشاط يؤدي إلى رسالة نخب.

المشكلة التي أواجهها هي أن onActivityResult يتم تشغيل الطريقة بمجرد الضغط على زر Scan Barcode.

تعمل عملية المسح بشكل جيد حيث يمكنني رؤية نتائج الفحص في logcat. ، ولكن لأنه يتم تشغيله في وقت قريب جدًا onActivityResult الطريقة لا تحصل أبدًا على نتيجة المسح ، ورمز النتيجة دائمًا -1

هل أفتقد خطوة هنا؟ هل هناك بعض الشيء من الوصول إلى onActivityResult للانتظار حتى ينتهي النشاط الفعلي؟

هل كانت مفيدة؟

المحلول

يبدو أن الماسح الضوئي الباركود الذي أستخدمه يحتوي على خلل معين في واجهات علامات التبويب مع مثيل واحد في البيان وهو ما كان لدي.

سمحت لي إزالة الشروط على سبيل المثال بالاختراق الذي يعمل بشكل مثالي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top