In meiner Bewerbung muss ich Qr-Code lesen. Ich habe im Internet gesucht und Zing-Codes gefunden, aber viele Entwickler hatten Probleme damit und es scheint, dass es fehlerhaft ist!
Wenn ich davon ausgehe, dass bei meinen Kunden qr reader auf ihrem Gerät installiert ist, wie kann ich diese Anwendungen verwenden und sie über implizite Absichten aufrufen?
Was passiert mit der Anwendung, wenn der Benutzer keinen qr-Reader hat? Wenn es abstürzt, kann ich den Benutzer bitten, zum Beispiel QrDroid herunterzuladen und danach zu verwenden?
Zxing ist eine hervorragende Bibliothek zum Scannen und Generieren von Qr-Code. Die folgende Implementierung verwendet die Zxing-Bibliothek zum Scannen des QR-Code-Bildes. Vergessen Sie nicht, die folgende Abhängigkeit im build.gradle hinzuzufügen
implementation 'me.dm7.barcodescanner:zxing:1.9'
Code-Scanner-Aktivität:
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(); } }
quelle
Interessanterweise hat Google jetzt Mobile Vision-APIs eingeführt , die in die Spieldienste selbst integriert sind.
Fügen Sie in Ihrer Gradle-Datei einfach Folgendes hinzu:
compile 'com.google.android.gms:play-services-vision:11.4.0'
Entnommen aus diesem QR-Code-Tutorial .
UPDATE 2020:
Jetzt ist das Scannen von QR-Codes auch Teil von ML Kit, sodass Sie das Modell in der App bündeln und verwenden können, indem Sie die folgende Gradle-Abhängigkeit integrieren:
dependencies { // ... // Use this dependency to bundle the model with your app implementation 'com.google.mlkit:barcode-scanning:16.0.3' }
Sie können auch die folgende Gradle-Abhängigkeit verwenden, um die Modelle dynamisch von Google Play Services herunterzuladen:
dependencies { // ... // Use this dependency to use the dynamically downloaded model in Google Play Services implementation 'com.google.android.gms:play-services-mlkit-barcode-scanning:16.1.2' }
Aus diesem Link entnommen .
quelle
In Android Studio können Sie den folgenden Prozess verwenden, um QR-Code zu erstellen und zu lesen. Das Bild sieht aus wie eine Glocke
Bibliothek in app.gradle hinzufügen
compile 'com.google.zxing:core:3.2.1' compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar'
Verwenden Sie in activity.main xml unten ..
<?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>
In MainActivity können Sie folgenden Code verwenden
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); } } }
Sie können den vollständigen Quellcode von GitHub herunterladen. Der GitHub-Link lautet: https://github.com/enamul95/QRCode
quelle
Ich habe ein einfaches Beispiel-Tutorial erstellt. Sie können dies lesen und in Ihrer Anwendung verwenden.
http://ribinsandroidhelper.blogspot.in/2013/03/qr-code-reading-on-your-application.html
Über diesen Link können Sie das qrcode-Bibliotheksprojekt herunterladen, in Ihren Arbeitsbereich importieren und Ihrem Projekt eine Bibliothek hinzufügen
und kopieren Sie diesen Code in Ihre Aktivität
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 } } }
quelle
Verwenden Sie eine QR-Bibliothek wie ZXing ... Ich hatte sehr gute Erfahrungen damit, QrDroid ist viel fehlerhafter. Wenn Sie sich auf einen externen Leser verlassen müssen, verlassen Sie sich auf einen Standard wie Google Goggles!
quelle
Einfache QR-Code-Bibliothek
Eine einfache Android Easy QR Code Library. Es ist sehr einfach zu bedienen, um diese Bibliothek zu benutzen, folgen Sie diesen Schritten.
Für Gradle:
Schritt 1. Fügen Sie es am Ende der Repositorys in Ihr root build.gradle ein:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
Schritt 2. Fügen Sie die Abhängigkeit hinzu:
dependencies { compile 'com.github.mrasif:easyqrlibrary:v1.0.0' }
Für Maven:
Schritt 1. Fügen Sie das JitPack-Repository zu Ihrer Build-Datei hinzu:
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository> </repositories>
Schritt 2. Fügen Sie die Abhängigkeit hinzu:
<dependency> <groupId>com.github.mrasif</groupId> <artifactId>easyqrlibrary</artifactId> <version>v1.0.0</version> </dependency>
Für SBT:
Schritt 1. Fügen Sie das JitPack-Repository zu Ihrer build.sbt-Datei hinzu:
resolvers += "jitpack" at "https://jitpack.io"
Schritt 2. Fügen Sie die Abhängigkeit hinzu:
libraryDependencies += "com.github.mrasif" % "easyqrlibrary" % "v1.0.0"
Für Leiningen:
Schritt 1. Fügen Sie es am Ende der Repositorys in Ihre project.clj ein:
:repositories [["jitpack" "https://jitpack.io"]]
Schritt 2. Fügen Sie die Abhängigkeit hinzu:
:dependencies [[com.github.mrasif/easyqrlibrary "v1.0.0"]]
Fügen Sie dies in Ihre Layout-XML-Datei ein:
<?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" android:padding="20dp" tools:context=".MainActivity" android:orientation="vertical"> <TextView android:id="@+id/tvData" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="No QR Data"/> <Button android:id="@+id/btnQRScan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="QR Scan"/> </LinearLayout>
Fügen Sie dies in Ihre Aktivitäts-Java-Dateien ein:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ TextView tvData; Button btnQRScan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvData=findViewById(R.id.tvData); btnQRScan=findViewById(R.id.btnQRScan); btnQRScan.setOnClickListener(this); } @Override public void onClick(View view){ switch (view.getId()){ case R.id.btnQRScan: { Intent intent=new Intent(MainActivity.this, QRScanner.class); startActivityForResult(intent, EasyQR.QR_SCANNER_REQUEST); } break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode){ case EasyQR.QR_SCANNER_REQUEST: { if (resultCode==RESULT_OK){ tvData.setText(data.getStringExtra(EasyQR.DATA)); } } break; } } }
Für einen benutzerdefinierten Scannerbildschirm fügen Sie einfach diese Zeilen hinzu, wenn Sie die Scanneraktivität starten.
Intent intent=new Intent(MainActivity.this, QRScanner.class); intent.putExtra(EasyQR.IS_TOOLBAR_SHOW,true); intent.putExtra(EasyQR.TOOLBAR_DRAWABLE_ID,R.drawable.ic_audiotrack_dark); intent.putExtra(EasyQR.TOOLBAR_TEXT,"My QR"); intent.putExtra(EasyQR.TOOLBAR_BACKGROUND_COLOR,"#0588EE"); intent.putExtra(EasyQR.TOOLBAR_TEXT_COLOR,"#FFFFFF"); intent.putExtra(EasyQR.BACKGROUND_COLOR,"#000000"); intent.putExtra(EasyQR.CAMERA_MARGIN_LEFT,50); intent.putExtra(EasyQR.CAMERA_MARGIN_TOP,50); intent.putExtra(EasyQR.CAMERA_MARGIN_RIGHT,50); intent.putExtra(EasyQR.CAMERA_MARGIN_BOTTOM,50); startActivityForResult(intent, EasyQR.QR_SCANNER_REQUEST);
Du bist fertig. Ref. Link: https://mrasif.github.io/easyqrlibrary
quelle