Desarrollo simple de código bidimensional de Android.

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">本文主要讲关于安卓的二维码的使用:扫描二维码,生成简单的二维码</span>

Yendo al grano: el escaneo de códigos QR requiere un marco relacionado. Google proporciona oficialmente un buen marco: el marco ZXing, que es relativamente simple y conveniente de usar

Plataforma: android studio, la primera es agregar dependencias, dos formas, buscar directamente ZXing en las dependencias y seleccionar el marco goodle

O puede elegir lib para agregar dependencias. Aquí puede encontrar una biblioteca en github (puede ir a https://github.com/yzbbanban para ver proyectos relacionados, sobre códigos QR), y aquí puede importar directamente la biblioteca lib. El método de importación ahora es usar lib Import en el proyecto de Android

Luego agregue dependencias

Este es el resultado después de agregar

La parte del código es muy simple, el archivo de diseño usa Button+TextView y TextView se usa para mostrar los resultados escaneados.

Código de diseño:

  <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:onClick="scan"
        android:layout_height="wrap_content"
        android:text="扫描" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />
Agregar evento onClick al botón

 public void scan(View view) {
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
    }

Inicie directamente CaptureActivity relacionado con el escaneo del código QR, y no necesita agregar permisos al archivo de registro (el permiso de la cámara se ha agregado a la biblioteca), solo llámelo directamente y necesitamos obtener el valor de retorno después del escaneo, entonces necesitamos startActivityForResult para obtener un valor de retorno
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String text = bundle.getString("result");
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            tv.setText(text);
        }
    }
Obtenga el valor de retorno para presentar datos relevantes, donde el parámetro obtenido en resultCode es el resultado de retorno de CaptureActivity en lib, y el código relacionado es el siguiente
  public void handleDecode(Result rawResult, Bundle bundle) {
        inactivityTimer.onActivity();
        beepManager.playBeepSoundAndVibrate();

        Intent resultIntent = new Intent();
        bundle.putInt("width", mCropRect.width());
        bundle.putInt("height", mCropRect.height());
        bundle.putString("result", rawResult.getText());
        resultIntent.putExtras(bundle);
        this.setResult(RESULT_OK, resultIntent);
        CaptureActivity.this.finish();
    }
Es decir, el valor obtenido es un paquete, y necesitamos usar el paquete para devolver parámetros relevantes en onActivityResult

De esta manera, se completa un programa simple de escaneo del código QR, y el resultado del código QR se puede devolver para generar una cadena

Permítanme presentarles el código para generar códigos QR a partir de texto: también usa el método en el marco, solo explíquelo un poco

Código de diseño:

<EditText
        android:id="@+id/et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_make"
        android:text="生成二维码"
        android:onClick="make"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/iv"
        android:src="@mipmap/my_logo"
        android:layout_gravity="center_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
Un cuadro de entrada, un botón de generación y una imagen realista (diseño Linnerlayout)

El método es muy simple. Obtenga los datos del cuadro de entrada y luego llame al método CreatorCode() en EncodingUtils. Los parámetros son: contenido de entrada, ancho de imagen, alto de imagen e imagen de logotipo (mapa de bits)

public void make(View view) {
        String intput = et.getText().toString().trim();
        if ("".equals(intput)) {
            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
        } else {
            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
            iv.setImageBitmap(b
            );
        }
    }

Luego está el código completo del código principal:
package com.wangban.yzbbanban.myapplication;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.xys.libzxing.zxing.activity.CaptureActivity;
import com.xys.libzxing.zxing.encoding.EncodingUtils;

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    private EditText et;
    private ImageView iv;
    private Bitmap logo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.tv);
        et = (EditText) findViewById(R.id.et);
        iv = (ImageView) findViewById(R.id.iv);
        logo = BitmapFactory.decodeResource(getResources(), R.mipmap.my_logo);

    }

    public void scan(View view) {
        startActivityForResult(new Intent(MainActivity.this, CaptureActivity.class), 0);
    }

    public void make(View view) {
        String intput = et.getText().toString().trim();
        if ("".equals(intput)) {
            Toast.makeText(this, "输入不为空", Toast.LENGTH_SHORT).show();
        } else {
            Bitmap b = EncodingUtils.createQRCode(intput, 500, 500, logo);
            iv.setImageBitmap(b
            );
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            Bundle bundle = data.getExtras();
            String text = bundle.getString("result");
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            tv.setText(text);
        }
    }

}

Supongo que te gusta

Origin blog.csdn.net/u013377003/article/details/52034688
Recomendado
Clasificación