Android QRcode Scanner Bibliothèque [fermé]
Qu'avons - nous à notre disposition (le cas échéant) que nous pouvons appeler pour la découverte et l'extraction de données QR sur une image?
Bien qu'il y ait eu beaucoup de messages référençant jusqu'à présent la bibliothèque ZXing pour la numérisation QRCode, et plusieurs autres demandant des alternatives de numérisation QRCode sans ce que j'avais considéré comme un retour utile, j'ai pensé que je pourrais demander à la communauté une fois de plus. Si peut-être il y a également les moyens d'utiliser la bibliothèque, autre qu'un lancement d'une activité, mais grâce à des appels fonctionnels, Je n'avais pas vu d'exemples ou d'individus en parlant de cette manière.
En fait, cela me demande pourquoi il n'y a pas eu d'implémentations natives de la fonctionnalité QRCode ajoutée dans Peut-être la bibliothèque de caméras ou un endroit similaire dans le SDK Google nativement dans le système d'exploitation.
Appeler et exiger une autre application (ou même demander un téléchargement) n'est pas une solution élégante et aucun utilisateur ne devrait succomber à faire une telle chose. Comme développeurs nous devrions avoir accès à une bibliothèque capable d'extraire un QRCode à partir d'une image ou d'un cadre que nous pouvons ensuite supprimer des données codées.
6 réponses
Alors que Sean Owen et d'autres qui ont travaillé sur la bibliothèque ZXing originale avaient fourni une approche pour travailler avec les bibliothèques de codes à barres au cours des dernières années, Google a finalement publié une version officielle avec les services Google Play pour la manipulation des codes QR et des codes à barres.
La bibliothèque de détection de codes à barres est décrite ici. L'inclusion de ces bibliothèques permettra une intégration en douceur. Je vais republier avec un exemple de code pour obtenir ces résultats à partir d'une image capturée. Pour le moment, je voulais mettre à jour ma réponse pour cette version officielle. Si cela fournit en effet un bon moyen d'obtenir cette information (sans sauter à travers des cerceaux et des complications), alors je vais mettre à jour avec la source et cocher ceci comme une réponse acceptée.
La bibliothèque de détection que Google a fournie au cours de la dernière année a été une bibliothèque beaucoup plus facile à utiliser. Il permet une intégration rapide avec les API de la caméra et extrait les informations avec simplicité. Ce serait la composante que je suggère d'aller de l'avant avec la reconnaissance. Un extrait rapide est démontré ci-dessous pour gérer un QR-code. Une poignée de pseudocode est laissée là aussi.
public final void analyzeFrameForQrCode(byte[] qrCodePictureF, int imageFormatF, XriteSize previewWindowSizeF)
{
if(!qrCodeDetectionPossible() || qrCodePictureF == null || mIsAnalyzingQrCodeFrame)
{
return;
}
... //Bitmap conversion code
Frame frame = new Frame.Builder().setBitmap(pictureTaken).build();
SparseArray<Barcode> barcodes = mBarcodeDetector.detect(frame);
if(barcodes != null && barcodes.size() != 0)
{
Barcode qrCode = barcodes.valueAt(0);//barcodes.get(Barcode.QR_CODE);
if(qrCode != null)
{
if(extractInformationFromQrCode(qrCode.rawValue)) {
mIsRequestingBarcodeDetection = false;
vibrateForQrCodeDiscovery();
((Activity)mContext).runOnUiThread(new Runnable() {
@Override
public void run()
{
hideBarcodeDetection(true);
}
});
}
}
}
... //Cleanup and code beyond Qr related material
}
}
Il y a bien sûr d'autres appels disponibles qui peuvent être utilisés. Mais il ya vraiment seulement quelques lignes. Le service d'analyse des trames avec la bibliothèque ne sont pas là par défaut sur les périphériques cependant. Donc, vous devriez vérifier si la Bibliothèque est disponible ou non (comme quand internet n'est pas disponible) avant de calculer ainsi. Ceci est une légère nuisance de celui-ci. J'avais supposé qu'il serait disponible en tant que mises à jour pour les appareils à l'avenir dans le cadre de la bibliothèque de support ou des Services Google allant à tous les appareils. Mais il a besoin de la communication d'abord avec un service externe pour utiliser ces appels de bibliothèque. Une fois qu'il le fait une fois, cet appareil est bon à partir de ce moment.
Dans mon petit exemple, je porte un toast après un chèque, puis je reviens de l'activité et laisser l'Utilisateur vérifier leur connexion. Cela peut également être fait avec une petite quantité d'exemple de code.
if(!mBarcodeDetector.isOperational())
{
updateUserInstructions("The barcode library cannot be downloaded");
return false;
}
Modifier (Mettre À Jour):
Un temps considérable s'est écoulé depuis l'utilisation des dernières bibliothèques Google Play Services Vision disponibles pour la détection de codes à barres. Bien que la limitation pour avoir besoin de télécharger la bibliothèque sur le wifi est en effet une limitation, c'est un processus unique. Et laisse être honnête...
...nos appareils ont connexion. La bibliothèque elle-même est téléchargée en arrière-plan, de sorte que vous ne remarquez même pas que cela se produit à moins qu'il y ait des problèmes à le télécharger et que vous deviez signaler une mesure corrective appropriée telle que l'activation d'une connexion à internet.
Une friandise supplémentaire est que c'est parfois un peu délicat avec la façon dont vous intégrez la bibliothèque dans votre application. L'utiliser comme un projet de bibliothèque a fonctionné sur certains appareils, puis a échoué sur d'autres. Ajouter le pot à le chemin de construction a fonctionné sur un plus grand nombre de périphériques (il pourrait être tout, mais il a résolu un problème). Donc, en tant que tel, je le ferais en utilisant la méthode secondaire en l'incluant dans vos projets pour l'instant.
Android QRcode Scanner Bibliothèque
Cela peut vous aider, cette bibliothèque ne nécessite aucun téléchargement ou utilisation d'une application externe. Nous pouvons l'intégrer directement dans votre application et l'utiliser pour scanner un code QR.
Https://github.com/dm77/barcodescanner
Ce wiki vous aidera à intégrer avec votre application,
Https://github.com/dm77/barcodescanner/blob/master/README.md
Vous pouvez également vérifier MobileVisionBarcodeScanner. Il est alimenté par l'API de vision mobile de Google. Voir aussi la vue d'ensemble ici .
Vous avez déjà trouvé la bibliothèque que vous cherchez, je pense. Voir le module core/
:
Https://github.com/zxing/zxing/tree/master/core
Vous regardez juste l'intégration basée sur Intent
, mais, en fait, le balayage de base est sa propre bibliothèque autonome que vous pouvez intégrer dans votre propre application.
Je pense que l'intégration basée sur Intent
est la meilleure dans la plupart des cas, simplement parce qu'elle est si simple, et que la plupart des gens n'ont pas le temps de réimplémenter leur propre interface utilisateur de numérisation et tels au dessus de la base. La plupart des appareils ont déjà installé Barcode Scanner, donc il n'a généralement pas besoin d'un téléchargement.
Quand même, faites votre choix. C'est pourquoi il existe au moins deux façons de l'utiliser.
J'ai utilisé cette bibliothèque dans mon application. Il fonctionne également avec xing, mais vous n'avez pas besoin d'applications tierces. Supplémentaire il est vraiment facile à utiliser.
Https://github.com/journeyapps/zxing-android-embedded
Peut-être que vous avez cherché quelque chose comme ça.
Plutôt que l'intégration de la bibliothèque QRCODE ZXing, vous pouvez ouvrir la caméra et numériser QRCode de n'importe où: Le code que j'ai trouvé ci-dessous peut vous aider à numériser QRCode:
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);
}
Se il vous plaît rappelez-vous que vous devez avoir une application de scanner de codes à barres par "Zxing" dans le téléphone Mobile sinon il va tout d'abord rediriger vers Google Play Store lien pour le télécharger.