मुख्य सामग्री पर जाएँ
CrossFly 100% ओपन सोर्सGitHub पर फ़ॉलो करें
CrossFlyCrossFly
शुरू करें

यह पृष्ठ पुर्तगाली से मशीन-अनुवादित है और इसमें त्रुटियाँ हो सकती हैं। पुर्तगाली संस्करण प्रामाणिक है।

QR Code या बारकोड कैसे पढ़ें

उद्देश्य। कैमरा खोलें और BarcodePicker के साथ लाइव QR Code या बारकोड पढ़ें, या CameraBarcode के साथ पहले से कैप्चर की गई किसी Image से कोड डिकोड करें।

उपयोग की गई APIs

  • BarcodePicker(String title, BarcodeFormat... formats) — लाइव रीडिंग की abstract विंडो; आप इसे extend करते हैं और onBarcode(BarcodeFormat, String) लागू करते हैं। खाली formats = सभी स्वीकार करता है।
  • abstract void onBarcode(BarcodeFormat format, String code) — प्रारूप फ़िल्टर से गुजरने वाले प्रत्येक नए डिकोड किए गए कोड पर कॉल किया जाता है।
  • BarcodePicker.formats1D / formats2D (स्टैटिक arrays) — प्रारूपों के तैयार सेट; formats2D में QR_CODE है।
  • BarcodePicker.beep / BarcodePicker.vibrate (स्टैटिक boolean) — डिकोड करते समय फ़ीडबैक (डिफ़ॉल्ट true)।
  • String getAnswer() — अंतिम डिकोड किया गया कोड, या रद्द होने पर null।
  • CameraBarcode.readBarcode(Image img) → com.google.zxing.Result (या null) — किसी स्थिर छवि से डिकोड करता है। यह thread-safe नहीं है।

महत्वपूर्ण भिन्नता। BarcodePicker abstract है और RunnableWith प्रकार के callback के बजाय onBarcode(...) मेथड का उपयोग करता है। एक उपवर्ग (अनाम या नामित) instantiate करें। picker डिकोड करते समय पहले से ही beep()/vibrate(20) निकालता है और दोहराए गए कोड को दबा देता है (केवल तभी onBarcode कॉल करता है जब टेक्स्ट बदलता है)। यह पढ़ने पर स्वयं बंद नहीं होता — यदि आप पहली रीडिंग पर समाप्त करना चाहते हैं तो onBarcode के अंदर hide() कॉल करें। “X” (नीचे दायाँ कोना) टैप करने पर रद्द हो जाता है।

पूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)

package com.exemplo;

import com.google.zxing.*;                  // BarcodeFormat
import dev.crossfly.ui.*;                   // Window, Component, Button, Label
import dev.crossfly.ui.layout.*;            // VerticalLayout
import dev.crossfly.ui.picker.*;            // BarcodePicker

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Label resultado = new Label("");
      add(LAY_AUTO, resultado);

      Button acao = new Button("Ler QR Code");
      acao.onAction(c ->
      {
         // लाइव रीडिंग — केवल QR Code; पहली रीडिंग पर बंद हो जाता है
         BarcodePicker picker = new BarcodePicker("Aponte para o QR", BarcodePicker.formats2D)
         {
            protected void onBarcode(BarcodeFormat format, String code)
            {
               // paint thread के बाहर कॉल किया गया → onUI(...) के साथ UI पर लौटें
               Component.onUI(() ->
               {
                  resultado.setText("Lido: " + code);
                  hide();            // पहली रीडिंग पर scanner बंद करता है (वैकल्पिक)
               });
            }
         };
         picker.show();
      });
      add(LAY_AUTO, acao);
   }
}

नीचे का अंश केवल मुख्य भाग दिखाता है। चलाने के लिए, इसे ऊपर दिए गए MainWindow ढाँचे में रखें।

न्यूनतम अंश

// स्रोत में सत्यापित: BarcodePicker.java (constructor, onBarcode, formats2D, getAnswer); CameraBarcode.java (readBarcode)
import com.google.zxing.*;                 // BarcodeFormat, Result
import dev.crossfly.ui.picker.*;           // BarcodePicker
import dev.crossfly.ui.*;                  // Component (onUI)

// 1) लाइव रीडिंग — केवल QR Code; पहली रीडिंग पर बंद हो जाता है
BarcodePicker picker = new BarcodePicker("Aponte para o QR", BarcodePicker.formats2D) {
   protected void onBarcode(BarcodeFormat format, String code) {
      // paint thread के बाहर कॉल किया गया → onUI(...) के साथ UI पर लौटें
      Component.onUI(() -> {
         processar(code);   // उदा.: किसी field को भरें, नेविगेट करें, आदि।
         hide();            // पहली रीडिंग पर scanner बंद करता है (वैकल्पिक)
      });
   }
};
picker.show();             // सभी formats स्वीकार करने के लिए constructor में formats खाली छोड़ें

// 2) किसी स्थिर Image से डिकोड करें (एक समय में एक camera/thread — thread-safe नहीं है)
Result r = CameraBarcode.readBarcode(minhaImagem);
if (r != null) {
   String texto = r.getText();
   BarcodeFormat fmt = r.getBarcodeFormat();
}

और गहराई में जाएँ

क्या यह पृष्ठ उपयोगी था?