android - p20 - lector qr samsung
Android, ¿cómo leer el código QR en mi aplicación? (7)
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 .
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?
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
He creado un tutorial de ejemplo simple. Puedes leer esto y usarlo en tu aplicación.
http://ribinsandroidhelper.blogspot.in/2013/03/qr-code-reading-on-your-application.html
A través de este enlace puede descargar el proyecto de la biblioteca qrcode e importarlo en su espacio de trabajo y agregar una biblioteca a su proyecto
y copia este código a tu actividad
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
startActivityForResult(intent, 0);
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
Toast.makeText(this, contents,Toast.LENGTH_LONG).show();
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
//Handle cancel
}
}
}
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();
}
}
En el estudio de Android, puede usar el proceso de abajo para crear y leer el código QR y la imagen se ven como un icono
- Crear un proyecto vacío de estudio de Android
Añadir biblioteca en app.gradle
compile ''com.google.zxing:core:3.2.1'' compile ''com.journeyapps:zxing-android-embedded:3.2.0@aar''
En activity.main xml use abajo ...
<?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" tools:context="com.example.enamul.qrcode.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="20dp" android:orientation="vertical"> <EditText android:id="@+id/editText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:hint="Enter Text Here" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_below="@+id/editText" android:text="Click Here TO generate qr code" android:textAllCaps="false" android:textSize="16sp" /> <Button android:id="@+id/btnScan" android:layout_width="fill_parent" android:layout_height="50dp" android:layout_below="@+id/editText" android:text="Scan Your QR Code" android:textAllCaps="false" android:textSize="16sp" /> <TextView android:id="@+id/tv_qr_readTxt" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/imageView" android:layout_width="match_parent" android:layout_height="200dp" android:layout_below="@+id/button" android:src="@android:drawable/ic_dialog_email" /> </LinearLayout> </LinearLayout>
En MainActivity puedes usar el código de abajo
public class MainActivity extends AppCompatActivity { ImageView imageView; Button button; Button btnScan; EditText editText; String EditTextValue ; Thread thread ; public final static int QRcodeWidth = 350 ; Bitmap bitmap ; TextView tv_qr_readTxt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView)findViewById(R.id.imageView); editText = (EditText)findViewById(R.id.editText); button = (Button)findViewById(R.id.button); btnScan = (Button)findViewById(R.id.btnScan); tv_qr_readTxt = (TextView) findViewById(R.id.tv_qr_readTxt); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(!editText.getText().toString().isEmpty()){ EditTextValue = editText.getText().toString(); try { bitmap = TextToImageEncode(EditTextValue); imageView.setImageBitmap(bitmap); } catch (WriterException e) { e.printStackTrace(); } } else{ editText.requestFocus(); Toast.makeText(MainActivity.this, "Please Enter Your Scanned Test" , Toast.LENGTH_LONG).show(); } } }); btnScan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { IntentIntegrator integrator = new IntentIntegrator(MainActivity.this); integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); integrator.setPrompt("Scan"); integrator.setCameraId(0); integrator.setBeepEnabled(false); integrator.setBarcodeImageEnabled(false); integrator.initiateScan(); } }); } Bitmap TextToImageEncode(String Value) throws WriterException { BitMatrix bitMatrix; try { bitMatrix = new MultiFormatWriter().encode( Value, BarcodeFormat.DATA_MATRIX.QR_CODE, QRcodeWidth, QRcodeWidth, null ); } catch (IllegalArgumentException Illegalargumentexception) { return null; } int bitMatrixWidth = bitMatrix.getWidth(); int bitMatrixHeight = bitMatrix.getHeight(); int[] pixels = new int[bitMatrixWidth * bitMatrixHeight]; for (int y = 0; y < bitMatrixHeight; y++) { int offset = y * bitMatrixWidth; for (int x = 0; x < bitMatrixWidth; x++) { pixels[offset + x] = bitMatrix.get(x, y) ? getResources().getColor(R.color.QRCodeBlackColor):getResources().getColor(R.color.QRCodeWhiteColor); } } Bitmap bitmap = Bitmap.createBitmap(bitMatrixWidth, bitMatrixHeight, Bitmap.Config.ARGB_4444); bitmap.setPixels(pixels, 0, 350, 0, 0, bitMatrixWidth, bitMatrixHeight); return bitmap; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { Log.e("Scan*******", "Cancelled scan"); } else { Log.e("Scan", "Scanned"); tv_qr_readTxt.setText(result.getContents()); Toast.makeText(this, "Scanned: " + result.getContents(), Toast.LENGTH_LONG).show(); } } else { // This is important, otherwise the result will not be passed to the fragment super.onActivityResult(requestCode, resultCode, data); } } }
Puede descargar el código fuente completo de GitHub. El enlace de GitHub es: https://github.com/enamul95/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);
}
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
}
}
}