لماذا يتم تشغيل onActivityResult قبل أن يبدأ النشاط؟
-
29-09-2019 - |
سؤال
لديّ تطبيق يحتاج إلى مسح الباركود للحصول على رمز قبل أن يتمكن من المتابعة. أستخدم هذا الرمز لبدء نشاط المسح:
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
للانتظار حتى ينتهي النشاط الفعلي؟
المحلول
يبدو أن الماسح الضوئي الباركود الذي أستخدمه يحتوي على خلل معين في واجهات علامات التبويب مع مثيل واحد في البيان وهو ما كان لدي.
سمحت لي إزالة الشروط على سبيل المثال بالاختراق الذي يعمل بشكل مثالي.