2012-01-12 14 views
36

मेरे आवेदन में मुझे क्यूआर कोड पढ़ने की जरूरत है। मैंने नेट की खोज की और ज़िंग कोड पाया हालांकि कई डेवलपर्स को इसका उपयोग करने में समस्या थी और ऐसा लगता है कि यह छोटी है!एंड्रॉइड, मेरे आवेदन में क्यूआर कोड कैसे पढ़ा जाए?

तो मैं मान लेते हैं कि अपने ग्राहकों को अपने डिवाइस पर स्थापित qr रीडर है, मैं उन अनुप्रयोगों का उपयोग करने व निहित उद्देश्यों के माध्यम से उन्हें फोन कर सकते हैं?

यदि उपयोगकर्ता किसी भी qr रीडर नहीं है, क्या आवेदन का क्या होगा? यदि यह दुर्घटनाग्रस्त हो जाता है, तो क्या मैं उपयोगकर्ता को QrDroid उदाहरण के लिए डाउनलोड करने के लिए कह सकता हूं और उसके बाद इसका उपयोग कर सकता हूं?

उत्तर

55
try { 

    Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
    intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); // "PRODUCT_MODE for bar codes 

    startActivityForResult(intent, 0); 

} catch (Exception e) { 

    Uri marketUri = Uri.parse("market://details?id=com.google.zxing.client.android"); 
    Intent marketIntent = new Intent(Intent.ACTION_VIEW,marketUri); 
    startActivity(marketIntent); 

} 

और में onActivityResult():

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 0) { 

     if (resultCode == RESULT_OK) { 
      String contents = data.getStringExtra("SCAN_RESULT"); 
     } 
     if(resultCode == RESULT_CANCELED){ 
      //handle cancel 
     } 
    } 
} 
+0

इस कोड बारकोड या QR कोड को स्कैन करने के ..? –

+0

हां। यह –

+0

करने के लिए ज़ैक्सिंग के बार कोड स्कैनर ऐप का उपयोग करता है लिटिल टाइपो: आपने –

2

ZXing की तरह एक QR पुस्तकालय का उपयोग करें ... मैं इसके साथ बहुत अच्छा अनुभव था, QrDroid ज्यादा buggier है। अगर आपको बाहरी पाठक पर भरोसा करना है, तो Google गोगल्स जैसे मानक पर भरोसा करें!

5

मैं एक साधारण उदाहरण ट्यूटोरियल बना लिया है। आप इसे पढ़ सकते हैं और अपने आवेदन में उपयोग कर सकते हैं।

http://ribinsandroidhelper.blogspot.in/2013/03/qr-code-reading-on-your-application.html

इस लिंक के माध्यम से आप QRCode पुस्तकालय परियोजना डाउनलोड कर सकते हैं और अपने कार्यक्षेत्र में आयात और अपनी परियोजना

को पुस्तकालय जोड़ सकते हैं और अपनी गतिविधि के लिए इस कोड को कॉपी

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

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      String contents = intent.getStringExtra("SCAN_RESULT"); 
      String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
      Toast.makeText(this, contents,Toast.LENGTH_LONG).show(); 
      // Handle successful scan 
     } else if (resultCode == RESULT_CANCELED) { 
      //Handle cancel 
     } 
    } 
} 
+0

हाय, क्या आप अपना उत्तर विस्तृत कर सकते हैं? यदि लिंक कभी टूटा जाता है तो लिंक-केवल उत्तर के पास उपयोगी नहीं होते हैं। – orique

+0

हाय मेरा उत्तर संपादित किया जाता है तो आप इस के माध्यम से जा सकते हैं और आप जवाब –

+0

में URL लिंक दिखना चाहिए इसे कहते हैं फ़ाइल है कि – Eenvincible

14

यदि उपयोगकर्ता के पास कोई क्यूआर रीडर नहीं है, तो एप्लिकेशन के साथ क्या होगा? यदि यह दुर्घटनाग्रस्त हो जाता है, तो क्या मैं उपयोगकर्ता को QrDroid उदाहरण के लिए डाउनलोड करने के लिए कह सकता हूं और उसके बाद इसका उपयोग कर सकता हूं?

दिलचस्प है, गूगल अब Mobile Vision APIs शुरू की, वे खेलने सेवाओं अपने आप में एकीकृत कर रहे हैं।

अपने Gradle फ़ाइल में बस जोड़ें:

compile 'com.google.android.gms:play-services-vision:9.6.1' 

इस QR code tutorial से लिया।

+0

के लिए –

9

ZXing QR कोड को स्कैन और पीढ़ी प्रदर्शन करने के लिए एक उत्कृष्ट पुस्तकालय है। निम्नलिखित कार्यान्वयन ZXing पुस्तकालय का उपयोग करता QR कोड छवि स्कैन करने के लिए मत

compile 'me.dm7.barcodescanner:zxing:1.9' 

कोड स्कैनर गतिविधि build.gradle में निम्नलिखित निर्भरता को जोड़ने के लिए भूल जाते हैं:

public class QrCodeScanner extends AppCompatActivity implements ZXingScannerView.ResultHandler { 
    private ZXingScannerView mScannerView; 

    @Override 
    public void onCreate(Bundle state) { 
     super.onCreate(state); 
     // Programmatically initialize the scanner view 
     mScannerView = new ZXingScannerView(this); 
     // Set the scanner view as the content view 
     setContentView(mScannerView); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     // Register ourselves as a handler for scan results. 
     mScannerView.setResultHandler(this); 
     // Start camera on resume 
     mScannerView.startCamera(); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     // Stop camera on pause 
     mScannerView.stopCamera(); 
    } 

    @Override 
    public void handleResult(Result rawResult) { 
     // Do something with the result here 
     // Prints scan results 
     Logger.verbose("result", rawResult.getText()); 
     // Prints the scan format (qrcode, pdf417 etc.) 
     Logger.verbose("result", rawResult.getBarcodeFormat().toString()); 
     //If you would like to resume scanning, call this method below: 
     //mScannerView.resumeCameraPreview(this); 
     Intent intent = new Intent(); 
     intent.putExtra(AppConstants.KEY_QR_CODE, rawResult.getText()); 
     setResult(RESULT_OK, intent); 
     finish(); 
    } 
} 
+1

यह कोड एप्लिकेशन में है, यह स्वीकार्य उत्तर – matheszabi

+1

होना चाहिए जब मुझे QRcode गतिविधि शुरू होने पर सफेद स्क्रीन मिलती है – kemdo

+0

यदि आपको एक श्वेत स्क्रीन मिलती है, तो " आज़माएं "https://github.com/dm77/barcodescanner पर वर्णित अनुसार, आपके AndroidManifest.xml के अनुभाग में। – jorgen

0

एंड्रॉयड स्टूडियो में, आप उपयोग कर सकते हैं & पढ़ें QR कोड & छवि बनाने के लिए प्रक्रिया bellow की तरह लग रहे bellw enter image description here

  1. एक एंड्रॉइड स्टूडियो खाली परियोजना
  2. ऐप में लाइब्रेरी जोड़ें।Gradle

    compile 'com.google.zxing:core:3.2.1' 
    compile 'com.journeyapps:zxing-android-embedded:[email protected]' 
    
  3. activity.main एक्सएमएल उपयोग bellow में ..

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.enamul.qrcode.MainActivity"> 
    
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_margin="20dp" 
        android:orientation="vertical"> 
    
    
    <EditText 
        android:id="@+id/editText" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center" 
        android:hint="Enter Text Here" /> 
    
    <Button 
        android:id="@+id/button" 
        android:layout_width="fill_parent" 
        android:layout_height="50dp" 
        android:layout_below="@+id/editText" 
        android:text="Click Here TO generate qr code" 
        android:textAllCaps="false" 
        android:textSize="16sp" /> 
    
    
    <Button 
        android:id="@+id/btnScan" 
        android:layout_width="fill_parent" 
        android:layout_height="50dp" 
        android:layout_below="@+id/editText" 
        android:text="Scan Your QR Code" 
        android:textAllCaps="false" 
        android:textSize="16sp" /> 
    
    <TextView 
        android:id="@+id/tv_qr_readTxt" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" /> 
    
    
    <ImageView 
        android:id="@+id/imageView" 
        android:layout_width="match_parent" 
        android:layout_height="200dp" 
        android:layout_below="@+id/button" 
        android:src="@android:drawable/ic_dialog_email" /> 
    
    
    </LinearLayout> 
    
    </LinearLayout> 
    
  4. MainActivity में आप bellow कोड का उपयोग कर सकते

    public class MainActivity extends AppCompatActivity { 
        ImageView imageView; 
        Button button; 
        Button btnScan; 
        EditText editText; 
        String EditTextValue ; 
        Thread thread ; 
        public final static int QRcodeWidth = 350 ; 
        Bitmap bitmap ; 
    
        TextView tv_qr_readTxt; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
    
        imageView = (ImageView)findViewById(R.id.imageView); 
        editText = (EditText)findViewById(R.id.editText); 
        button = (Button)findViewById(R.id.button); 
        btnScan = (Button)findViewById(R.id.btnScan); 
        tv_qr_readTxt = (TextView) findViewById(R.id.tv_qr_readTxt); 
    
    button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
    
    
    
         if(!editText.getText().toString().isEmpty()){ 
          EditTextValue = editText.getText().toString(); 
    
          try { 
           bitmap = TextToImageEncode(EditTextValue); 
    
           imageView.setImageBitmap(bitmap); 
    
          } catch (WriterException e) { 
           e.printStackTrace(); 
          } 
         } 
         else{ 
          editText.requestFocus(); 
          Toast.makeText(MainActivity.this, "Please Enter Your Scanned Test" , Toast.LENGTH_LONG).show(); 
         } 
    
         } 
        }); 
    
    
    btnScan.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View view) { 
    
         IntentIntegrator integrator = new IntentIntegrator(MainActivity.this); 
         integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); 
         integrator.setPrompt("Scan"); 
         integrator.setCameraId(0); 
         integrator.setBeepEnabled(false); 
         integrator.setBarcodeImageEnabled(false); 
         integrator.initiateScan(); 
    
        } 
        }); 
        } 
    
    
    Bitmap TextToImageEncode(String Value) throws WriterException { 
        BitMatrix bitMatrix; 
        try { 
        bitMatrix = new MultiFormatWriter().encode(
          Value, 
          BarcodeFormat.DATA_MATRIX.QR_CODE, 
          QRcodeWidth, QRcodeWidth, null 
        ); 
    
        } catch (IllegalArgumentException Illegalargumentexception) { 
    
        return null; 
        } 
        int bitMatrixWidth = bitMatrix.getWidth(); 
    
        int bitMatrixHeight = bitMatrix.getHeight(); 
    
        int[] pixels = new int[bitMatrixWidth * bitMatrixHeight]; 
    
        for (int y = 0; y < bitMatrixHeight; y++) { 
         int offset = y * bitMatrixWidth; 
    
        for (int x = 0; x < bitMatrixWidth; x++) { 
    
         pixels[offset + x] = bitMatrix.get(x, y) ? 
           getResources().getColor(R.color.QRCodeBlackColor):getResources().getColor(R.color.QRCodeWhiteColor); 
         } 
        } 
        Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444); 
    
        bitmap.setPixels(pixels, 0, 350, 0, 0, bitMatrixWidth, bitMatrixHeight); 
        return bitmap; 
    } 
    
    
    
    
        @Override 
        protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
        if(result != null) { 
        if(result.getContents() == null) { 
         Log.e("Scan*******", "Cancelled scan"); 
    
        } else { 
         Log.e("Scan", "Scanned"); 
    
         tv_qr_readTxt.setText(result.getContents()); 
         Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); 
        } 
        } else { 
         // This is important, otherwise the result will not be passed to the fragment 
        super.onActivityResult(requestCode, resultCode, data); 
        } 
        } 
    } 
    
  5. आप GitHub से पूर्ण स्रोत कोड डाउनलोड कर सकते हैं। GitHub लिंक है: https://github.com/enamul95/QRCode