studio - leer codigo qr android sin app




Android, ¿cómo leer el código QR en mi aplicación? (5)

En mi aplicación, necesito leer el código Qr. Busqué en la red y encontré códigos Zing, sin embargo, muchos desarrolladores tuvieron problemas para usarlo y parece que tiene errores.

Si asumo que mis clientes tienen qr reader instalado en su dispositivo, ¿cómo puedo usar esas aplicaciones y llamarlas por medio de intentos implícitos?

si el usuario no tiene ningún lector qr, ¿qué pasará con la aplicación? si se bloquea, ¿puedo pedirle al usuario que descargue, por ejemplo, QrDroid y luego usarlo?


si el usuario no tiene ningún lector qr, ¿qué pasará con la aplicación? si se bloquea, ¿puedo pedirle al usuario que descargue, por ejemplo, QrDroid y luego usarlo?

Curiosamente, Google ahora presentó las API de Mobile Vision , que están integradas en los servicios de juego en sí.

En su archivo Gradle solo agregue:

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

Tomado de este tutorial de código QR .


Biblioteca de códigos QR fácil

Una simple biblioteca de códigos QR fáciles de Android. Es muy fácil de usar, para utilizar esta biblioteca siga estos pasos.

Para Gradle:

Paso 1. Agrégalo en tu build.gradle raíz al final de los repositorios:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

Paso 2. Agrega la dependencia:

dependencies {
        compile 'com.github.mrasif:easyqrlibrary:v1.0.0'
}

Para Maven:

Paso 1. Agregue el repositorio de JitPack a su archivo de compilación:

<repositories>
    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>
</repositories>

Paso 2. Agrega la dependencia:

<dependency>
    <groupId>com.github.mrasif</groupId>
    <artifactId>easyqrlibrary</artifactId>
    <version>v1.0.0</version>
</dependency>

Para SBT:

Paso 1. Agregue el repositorio JitPack a su archivo build.sbt:

resolvers += "jitpack" at "https://jitpack.io"

Paso 2. Agrega la dependencia:

libraryDependencies += "com.github.mrasif" % "easyqrlibrary" % "v1.0.0"

Para Leiningen:

Paso 1. Agréguelo en su project.clj al final de los repositorios:

:repositories [["jitpack" "https://jitpack.io"]]

Paso 2. Agrega la dependencia:

:dependencies [[com.github.mrasif/easyqrlibrary "v1.0.0"]]

Agregue esto en su archivo xml de diseño:

<?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>

Agregue esto en sus archivos de actividad java:

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;
        }
    }
}

Para la pantalla de escáner personalizada, simplemente agregue estas líneas cuando inicie la actividad del escáner.

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);

Estás listo. Árbitro. Enlace: https://mrasif.github.io/easyqrlibrary


Use una biblioteca QR como ZXing ... Tuve una muy buena experiencia con ella, QrDroid es mucho más complicado. Si debe confiar en un lector externo, ¡confíe en uno estándar como Google Goggles!


Zxing es una excelente biblioteca para realizar exploración y generación de código Qr. La siguiente implementación usa la biblioteca Zxing para escanear la imagen del código QR. No olvide agregar la siguiente dependencia en build.gradle.

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

Actividad del escáner de código:

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();
    }
}

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);

}

y en 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
        }
    }
}




implicit