Cómo integrar una impresora para una aplicación Android

Integrar impresora en app

En digitalDot tenemos un equipo de diseño de aplicaciones móviles que está al día de todas las funcionalidades y necesidades que debe cubrir una app.

 

En esta ocasión, han desarrollado una app para una empresa catalana que necesitaba, también, que se pudieran imprimir tickets desde el quiosco para el que se había creado la aplicación.

 

A continuación, os vamos a contar brevemente algunos de los puntos que deberéis tener en cuenta en el caso de que queráis imprimir desde vuestra app para Android.

Imprimir desde una aplicación Android

Lo primero que debemos hacer es encontrar una impresora que sea compatible con la versión Android de vuestra app.

 

Nosotros hemos elegido la impresora SLK-TS400 3-inch Direct Thermal POS Printer y la integraremos a través de una conexión USB.

Después de obtener la impresora compatible, buscaremos los correspondientes drivers necesarios para que sea funcional en el dispositivo móvil Android.

 

¿Dónde podemos encontrar los drivers? En la tienda de Google Play. Allí, elegimos el: POS PRINTER DRIVER ESC/POS

Tras instalar la aplicación en nuestro dispositivo, configuraremos la aplicación donde solo deberemos indicar el tipo de conexión, en nuestro caso mediante USB, y seleccionar la impresora que vamos a utilizar.

 

A continuación, iniciaremos una impresión de prueba desde la misma aplicación.

 

Si llegados a este punto, surge algún problema, deberemos revisar las versiones Android y las especificaciones de la impresora, así como asegurarnos de que la conexión USB está correcta.

 

Suponiendo todo vaya bien, lo siguiente es preparar nuestra aplicación con las librerías necesarias.

Diseño de aplicaciones móviles

 

¿Cómo integramos una impresora en nuestra aplicación móvil?

1- Añadimos el repositorio de JitPack en el archivo de compilación. Deberemos integrarlos en los archivos: raíz/build.gradle.

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

/app/build.gradle

dependencies {
          ...
          implementation 'com.github.DantSu:ESCPOS-ThermalPrinter-Android:2.0.6'
}

2- Otorgamos los permisos para la conexión USB

<uses-feature android:name=»android.hardware.usb.host» />

Y deberemos verificar el permiso USB en nuestro código:

private static final String ACTION_USB_PERMISSION = 
"com.android.example.USB_PERMISSION";
private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {
       public void onReceive(Context context, Intent intent) {
              String action = intent.getAction();
              if (MainActivity.ACTION_USB_PERMISSION.equals(action)) {
                   synchronized (this) {
                           UsbManager usbManager = (UsbManager) 
getSystemService(Context.USB_SERVICE);
                           UsbDevice usbDevice = (UsbDevice) 
intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
                              if 
(intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                                       if (usbManager != null && usbDevice != null) {
                                            // YOUR PRINT CODE HERE
                                      }
                               }
                         }
                  }
          }
};
public void printUsb() {
        UsbConnection usbConnection = 
UsbPrintersConnections.selectFirstConnected(this);
        UsbManager usbManager = (UsbManager) 
this.getSystemService(Context.USB_SERVICE);
       if (usbConnection != null && usbManager != null) {
            PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, 
new Intent(MainActivity.ACTION_USB_PERMISSION), 0);
               IntentFilter filter = new 
IntentFilter(MainActivity.ACTION_USB_PERMISSION);
               registerReceiver(this.usbReceiver, filter);
              usbManager.requestPermission(usbConnection.getDevice(), 
permissionIntent);
         }
}

Por último, el código ejemplo que incluiremos en nuestra actividad es el siguiente:

EscPosPrinter printer = new EscPosPrinter(new UsbConnection(usbManager, 
usbDevice), 203, 48f, 32);
printer
         .printFormattedText(
"[C]<img>" + PrinterTextParserImg.bitmapToHexadecimalString(printer, 
this.getApplicationContext().getResources().getDrawableForDensity(R.drawable.
logo, DisplayMetrics.DENSITY_MEDIUM))+"</img>\n" +
"[L]\n" +
"[C]<u><font size='big'>ORDER N°045</font></u>\n" +
"[L]\n" +
"[C]================================\n" +
"[L]\n" +
"[L]<b>BEAUTIFUL SHIRT</b>[R]9.99e\n" +
"[L] + Size : S\n" +
"[L]\n" +
"[L]<b>AWESOME HAT</b>[R]24.99e\n" +
"[L] + Size : 57/58\n" +
"[L]\n" +
"[C]--------------------------------\n" +
"[R]TOTAL PRICE :[R]34.98e\n" +
"[R]TAX :[R]4.23e\n" +
"[L]\n" +
"[C]================================\n" +
"[L]\n" +
"[L]<font size='tall'>Customer :</font>\n" +
"[L]Raymond DUPONT\n" +
"[L]5 rue des girafes\n" +
"[L]31547 PERPETES\n" +
"[L]Tel : +33801201456\n" +
"[L]\n" +
"[C]<barcode type='ean13' height='10'>831254784551</barcode>\n" +
"[C]<qrcode size='20'>http://www.developpeur-
web.dantsu.com/</qrcode>"
);

Si no te ha quedado del todo claro, puedes seguir esta librería en Github que explica el proceso paso por paso.

Desde digitalDot queremos seguir aportando soluciones a todas las empresas que quieren seguir creciendo en el ámbito online y en las aplicaciones móviles.

Diseño de aplicaciones móviles

OTRAS NOTICIAS SOBRE Actualidad web