Biblioteca de Scanner de QRCode Android [fechada]

O que temos lá fora disponível para nós (se alguma coisa) que podemos chamar para a descoberta de dados QR e extração em uma imagem?

Embora tenha havido uma abundância de posts até agora Referenciando a biblioteca ZXing para a digitalização de QRCode, e vários outros pedindo por alternativas de digitalização de QRCode sem o que eu tinha visto como feedback útil, eu pensei que poderia perguntar à comunidade mais uma vez. Se talvez haja também os meios para usar a biblioteca que não um lançamento de uma atividade mas através de chamadas funcionais, eu não tinha visto exemplos ou indivíduos falando sobre isso desta maneira.

isso realmente me intriga por que não houve implementações nativas da funcionalidade QRCode adicionada talvez na biblioteca de câmeras ou lugar similar dentro do Google SDK nativamente dentro do sistema operacional.

chamar e exigir outra aplicação (ou mesmo pedir um download) não é uma solução elegante e nenhum usuário deve ser sucumbido a fazer tal coisa. Como Desenvolvedores devemos ter acesso a uma biblioteca capaz de extrair um QRCode de uma imagem ou moldura da qual podemos então remover dados codificados.

Author: Jay Snayder, 2013-12-27

6 answers

Enquanto Sean Owen e outros que trabalharam na biblioteca Zxing original tinham fornecido uma abordagem para trabalhar com as bibliotecas de código de barras nos últimos anos, o Google finalmente lançou um lançamento oficial com os Serviços Google Play para lidar com qr e códigos de barras.

A biblioteca de detecção de códigos de barras está descrita aqui. A inclusão destas bibliotecas permitirá uma integração harmoniosa. Vou repostar com algum código de amostra para obter estes resultados de um capturado imagem. De momento, eu queria atualizar minha resposta para este lançamento oficial. Se isso realmente fornecer uma boa maneira de obter esta informação (sem saltar através de aros e complicações), então eu vou atualizar com a fonte e verificar isso fora como uma resposta aceita.

A biblioteca de detecção que o Google forneceu no último ano tem sido uma biblioteca muito mais fácil de trabalhar. Permite uma rápida integração com a APIs da câmera e extrai a informação com simplicidade. Este seria o componente que eu sugeriria para avançar com o reconhecimento. Um excerto rápido é demonstrado abaixo para lidar com um código Qr. Um punhado de pseudocode é deixado lá também.

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

   } 
}
Claro que há outras chamadas disponíveis que podem ser aproveitadas. Mas há apenas algumas linhas lá dentro. O serviço para analisar os quadros com a biblioteca não está lá por padrão em dispositivos no entanto. Então, você deve verificar se a Biblioteca é ou não disponível (como quando a internet não está disponível) antes de calcular também. Isto é um pequeno incómodo. Eu tinha assumido que estaria disponível como atualizações para dispositivos indo para a frente como parte da biblioteca de suporte ou serviços do Google indo para todos os dispositivos. Mas precisa da comunicação primeiro com um serviço externo para usar essas chamadas da biblioteca. Uma vez que ele faz isso uma vez, então esse dispositivo é bom a partir desse momento. No meu pequeno exemplo, faço um brinde depois de um cheque e ... em seguida, volte para fora da Atividade e deixe o Usuário verificar sua conexão. Isto pode ser feito com uma pequena quantidade de código de amostra também.
if(!mBarcodeDetector.isOperational())
{
    updateUserInstructions("The barcode library cannot be downloaded");
    return false;
}

Editar (Actualizar):

Passou-se uma quantidade considerável de tempo desde o trabalho com as mais recentes bibliotecas de visão do Google Play Services disponíveis para detecção de códigos de barras. Enquanto a limitação para a necessidade de baixar a biblioteca sobre o Wi-Fi é de fato uma limitação, é um processo de uma vez. E sejamos honestos...

...nossos os dispositivos terão uma ligação. A biblioteca em si é baixada em segundo plano para que você nem sequer notar isso acontecendo a menos que haja dificuldade em baixá-lo e então você teria que relatar uma medida corretiva adequada, como permitir uma conexão à internet para ele.

Um tidbit adicional é que às vezes é um pouco complicado com a forma como você integra a biblioteca em sua aplicação. Usando-o como um projeto de biblioteca trabalhou em alguns dispositivos e, em seguida, falhou em outros. Adicionar o jar ao caminho de construção funcionou através de um número mais amplo de dispositivos (pode ser tudo, mas resolveu um problema). Então, como tal, eu faria isso usando o método secundário quando incluí - lo em seus projetos por agora.

 8
Author: Jay Snayder, 2016-06-24 15:48:03

Android QRCode Scanner Library

Isto pode ajudá-lo, esta biblioteca não necessita de qualquer download ou uso de qualquer aplicação externa. Podemos integrar isso diretamente em seu aplicativo e usá-lo para digitalizar um código QR.

Https://github.com/dm77/barcodescanner

Este wiki vai ajudá-lo a integrar-se com a sua aplicação,

Https://github.com/dm77/barcodescanner/blob/master/README.md

 4
Author: VivekTamilarasan, 2017-08-07 07:40:27

Também pode verificarMobileVisionBarcodeScanner . É alimentado pela API de visão móvel do Google. Veja também a visão geral Aqui .

 3
Author: Nosakhare Belvi, 2016-10-13 05:11:44
Acho que já encontraste a biblioteca que procuras. Ver o módulo core/:

Https://github.com/zxing/zxing/tree/master/core

Você está apenas olhando para a integração baseada em Intent, mas, na verdade, a digitalização do núcleo é sua própria biblioteca independente que você pode incorporar em sua própria aplicação.

Eu acho que a integração baseada em Intent é melhor na maioria dos casos, simplesmente porque é tão simples, e, a maioria das pessoas não tem tempo para reimplantar a sua própria digitalização UI e tal no topo do núcleo. A maioria dos dispositivos já tem Scanner de código de barras instalado, por isso, geralmente não precisa de um download.

Ainda assim, escolhe. É por isso que há pelo menos duas maneiras de usá-lo.
 1
Author: Sean Owen, 2016-10-19 09:41:38
Usei esta biblioteca na minha aplicação. Ele também funciona com xing, mas você não precisa de nenhuma aplicação de terceiros. Além disso, é muito fácil de usar.

Https://github.com/journeyapps/zxing-android-embedded

Talvez tenhas procurado algo assim.
 0
Author: Daniel S., 2017-02-12 15:06:01

Em vez da integração da biblioteca QRCODE ZXing, você é capaz de abrir a câmera e digitalizar o QRCode de qualquer lugar: O código que eu encontrei abaixo pode ser útil para você para digitalizar 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);
            }

Por favor, lembre-se que você deve ter uma aplicação de scanner de código de barras por "Zxing" no telefone celular, caso contrário ele irá primeiro redirecionar para o Google play store link para baixá-lo.

 -3
Author: Neel Mevada, 2014-12-25 12:57:10