2012-06-13 28 views
11

से लौट नहीं रहा सफलतापूर्वक कोड स्कैन करने ZXing उपयोग कर रहा हूँ, स्थापित बारकोड रीडर की मंशा को फोन करके, लेकिन जब यह बीप और एक अच्छा स्कैन मैं उम्मीद ZXing गतिविधि नियंत्रण वापसी होगी मैं तो इंगित करता है परिणाम संसाधित कर सकते हैं, लेकिन यह वहां बैठता है और फिर से स्कैन करने का प्रयास करता है। मुझे बैक बटन और दबाएं, फिर यह लौटाता है और मैं अगला कदम कर सकता हूं। क्या कोई स्पष्ट ध्वज है जब मैं स्कैनर कहता हूं तो मुझे याद आ रही है?एंड्रॉयड: बारकोड स्कैन सफल ZXing लेकिन गतिविधि

कृतज्ञता प्राप्त किसी भी सलाह। बहुत धन्यवाद।

यहाँ मेरी कोड है:

public boolean onTouchEvent(final MotionEvent event) { 

    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.putExtra("com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE"); 
    startActivityForResult(intent, 0); 

    return true; 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    super.onActivityResult(requestCode, resultCode, intent); 

    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 

      // Handle successful scan 

      String s = "http://www.google.com/search?q="; 
      s += contents; 
      Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s)); 
      startActivity(myIntent1); 
      } 
     else 
      if (resultCode == RESULT_CANCELED) { 
       // Handle cancel 
       } 
      } 
     } 
    } 

उत्तर

4

प्रदान की IntentIntegrator वर्ग का उपयोग क्यों नहीं? प्रोजेक्ट डॉक्स में वर्णित यह एकमात्र दृष्टिकोण है, क्या आपने उन पर एक नज़र डाली है? https://github.com/zxing/zxing/wiki/Scanning-Via-Intent

मैंने इसे इरादे भेजने और पार्स करने के इन विवरणों को लपेटने के लिए बनाया है, इसलिए आप टाइपो नहीं बनाते हैं। उदाहरण के लिए, अतिरिक्त "com.google.zxing.client.android.SCAN.SCAN_MODE" जैसी कोई चीज़ नहीं है।

+0

क्षमा करें शॉन, मैं नोब हूं: आयात com.google.zxing.integration.android.IntentIntegrator; विफल रहा है क्योंकि com.google को हल नहीं किया जा सकता है। क्या मुझे कहीं एक लिंक याद आ रहा है? बहुत धन्यवाद। – Barry

+0

ठीक है, यह सब काम करता है! क्षमा करें, मुझे एहसास नहीं हुआ कि आपका मतलब है कि मेरे ऐप (इंटेंट इंटेग्रेटर और इंटेंट रिसेट) में दो पूरी कक्षाएं जोड़ें। स्थापित योजना स्कैनर को कॉल करने के लिए कोड की लगभग 10 लाइनों का उपयोग करने के लिए मूल योजना आदर्श थी अगर मुझे इसे काम करने का कोई तरीका मिल सके। इस तरह स्कैनर के अपडेट भी मेरे ऐप में अपडेट करते हैं, इस तरह मुझे अपने परिवर्तनों पर मैन्युअल रूप से नजर रखना पड़ता है :(जो चीज आपने कहा वह मौजूद नहीं है [लिंक] से आया [http://stackoverflow.com/questions/2050263/उपयोग-जेएक्सिंग-टू-बिल्ड-ए-एंड्रॉइड-बारकोड-स्कैनिंग-ऐप) - एक वार्तालाप जिसे आपने पिछले साल शामिल किया था। मदद के लिए धन्यवाद। – Barry

1

finishActivity (requestCode) जोड़ें; AtctivityResult() विधि के अंत में।

इस प्रयास करें: नीचे कोड के साथ onTouch में अपने पहले 2 लाइनों बदलें। ऐसा लगता है कि क्यूआर के अलावा अन्य कोड स्कैन करते समय यह मुद्दा है। कृपया स्कैन फ़िल्टर हटाएं और एक बार जांचें।

इरादा इरादा = नया इरादा ("com.google.zxing.client.android.SCAN"); intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

+0

क्षमा करें अल्फी, यह * समस्या के बाद * है। जब तक मैं बैक कुंजी हिट नहीं करता तब तक निष्पादन कभी भी '// हैंडल सफल स्कैन' तक नहीं पहुंचता है। ऐसा लगता है कि स्कैन पर ही लूपिंग हो रही है और कभी भी मेरे कोड पर नियंत्रण वापस नहीं ले रहा है। – Barry

+0

क्या आप केवल क्यूआर कोड स्कैन कर रहे हैं, क्योंकि आपका कोड दिखाता है? यदि आप 1 डी और मैट्रिक्स को स्कैन और स्कैन करते हैं तो यह वास्तव में कुछ भी स्कैन किए बिना हरे रंग के बिंदु दिखाता रहता है। – Alfred

+0

इसके ऊपर दिए गए कोड के साथ सफलतापूर्वक क्यूआर और ईएएन 13 आदि स्कैन किया गया है, लेकिन यह मेरी पहली डुबकी ज़िक्सिंग में है इसलिए किसी भी अन्य पॉइंटर्स का स्वागत है, लेकिन मेरी मुख्य समस्या यह है कि जब यह अच्छा नतीजा हो जाए तो उसे जाने के लिए ज़क्सिंग मिल रही है। – Barry

10

यहाँ अपने ही सवाल का पूरा जवाब है, यह मदद करता है किसी को आशा है कि:

जाओ here और, पूरे IntentIntegrator वर्ग कॉपी अपने एप्लिकेशन में जोड़ें; here पर भी जाएं और IntentResult क्लास को अपने ऐप पर कॉपी करें।

public boolean onTouchEvent(final MotionEvent event) { 

    IntentIntegrator integrator = new IntentIntegrator(this); 
    integrator.initiateScan(); 

    return true; 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); 
     if (scanResult != null) { 
     // handle scan result 
      String s = "http://www.google.com/search?q="; 
      s += scanResult.getContents(); 

      Intent myIntent1 = new Intent(Intent.ACTION_VIEW, Uri.parse(s)); 
      startActivity(myIntent1); 
     } 
     // else continue with any other code you need in the method 
     //... 
    } 

यह बहुत अच्छा होता सिर्फ बारकोड स्कैनर एप्लिकेशन द्वारा उपलब्ध कराई गई सेवाओं कॉल करने के लिए और में कोड के पेस्ट हिस्सा कॉपी और नहीं: अब (एक बटन/जो कुछ भी द्वारा या स्कैन को ट्रिगर) अपनी गतिविधि में जोड़ना आपका स्वयं का ऐप लेकिन यह अनुशंसित तरीका प्रतीत होता है :(

+0

मुझे यकीन नहीं है कि मैं आपकी आखिरी टिप्पणी को समझता हूं। यदि आप प्रदान की गई एकीकरण लाइब्रेरी का उपयोग कर रहे हैं तो न्यूनतम कोड की प्रतिलिपि और पेस्ट कर सकते हैं। क्षमा करें, यह निश्चित रूप से 0 लाइन नहीं हो सकती है। आप एकीकरण लाइब्रेरी का उपयोग नहीं कर सकते हैं। लेकिन फिर आप अपना कोड दोबारा लिखेंगे, जो शायद लाइनों के दस गुना हो, यकीन है। लेकिन यह और भी है। निश्चित रूप से, अगर आप चाहें तो ऐसा करें - आवश्यक कोड को पुन: पेश करने और प्रदान किए गए आवश्यक कोड की प्रतिलिपि बनाने के बीच क्या अंतर है? –

+0

क्षमा करें शॉन, मेरा मतलब यह नहीं था कि (मैंने शायद किया - यह एक लंबा दिन था, मैं क्षमा चाहता हूं)। मेरा मूल स्टैब, यहां पहले के जवाब से कॉपी किया गया था, कुछ लाइनें जो आपके ऐप द्वारा पेश किए गए इरादे का उपयोग करती हैं, जो सही होती। आपने अनुशंसा की है कि मैं IntentIntegrator का उपयोग करता हूं जो एक अलग मार्ग है, और निश्चित रूप से यह पूरी तरह से काम करता है। मेरा पहला हैक * इतना करीब था * - अगर मैं सफल स्कैन के बाद रिलीज करने का अपना इरादा प्राप्त कर सकता था तो मुझे 500 लाइनों और दो कक्षाओं को जोड़ने के बजाय 10 लाइनों में कार्यक्षमता मिलती। चीयर्स, बी – Barry

1

मुझे एक ही समस्या थी इसलिए मैंने सीन ओवेन द्वारा अनुशंसित IntentIntegrator क्लास का उपयोग करने का प्रयास किया। मुझे तब तक समस्या आई जब तक मुझे एहसास हुआ कि यह केवल तभी हो रहा था जब यह कोशिश कर रहा था पोर्ट्रेट में बारकोड स्कैन करने के लिए (अक्सर फोन पर)। यह पता चला है कि पोर्ट्रेट से परिदृश्य में अभिविन्यास परिवर्तन डबल स्कैन का कारण बनता है। मैंने android:configChanges="orientation|keyboardHidden|screenSize" को मेरी गतिविधि में जोड़कर इसे हल किया प्रकट। आपको शायद केवल उन्मुखीकरण की आवश्यकता है, लेकिन यह अनचाहे है।

एडोब एयर मूल एक्सटेंशन बनाते समय इस समस्या का सामना करने वाले किसी भी उपयोगकर्ता के लिए, न केवल अपने एंड्रॉइड प्रोजेक्ट मेनिफेस्ट में उस लाइन को जोड़ना सुनिश्चित करें, बल्कि अपने ऐप.एक्सएमएल में अपने एंड्रॉइड मैनिफेस्ट एडिशन में अपने गतिविधि टैग को भी जोड़ना सुनिश्चित करें।

+0

यह मदद करता है कि जिस गतिविधि से आप कैप्चर एक्टिविटी शुरू करते हैं, वह लैंडस्केप मोड में है। मैंने 'एंड्रॉइड: स्क्रीनऑरिएंटेशन = "लैंडस्केप" को मैनिफेस्ट में उस गतिविधि में जोड़ा। जो मेरे लिए काम किया। – Christine

0

यहाँ समाधान है कि मैं का उपयोग कर रहा है। यह मेरे लिए ठीक काम कर रहा है।

Intent intent = new Intent(SelectOptionActivity.this, CaptureActivity.class); 
       intent.putExtra("SCAN_MODE", "ONE_D_MODE"); 
       intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A,QR_CODE"); 
       intent.setAction(Intents.Scan.ACTION); 
       startActivityForResult(intent, 1); 


public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (requestCode == 1 && resultCode == RESULT_OK) { 
      final String contents = intent.getStringExtra(Intents.Scan.RESULT); 
      final String formatName = intent.getStringExtra(Intents.Scan.RESULT_FORMAT); 

     } 
    }