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