programacion - manual de android en pdf
Android: impresiĆ³n bluetooth (3)
Tengo que desarrollar una aplicación para tabletas Android que exija imprimir archivos en una impresora Bluetooth. La impresión a través de Bluetooth es una de las características más importantes de mi aplicación. Desafortunadamente, no hay mucha información sobre este tema, así que me gustaría pedirle un consejo.
Por lo que sé, no es posible imprimir sobre Bluetooth en Android (usando llamadas nativas), ya que el BT Stack de Android no implementa BPP (Perfil de impresión básico). Haciendo un poco de investigación he encontrado las siguientes alternativas:
SDKs / Bibliotecas
- Sybase-iAnywhere-Blue-SDK-for-Android : SDK comercial que admite muchos perfiles de BT. Desarrollado por una gran empresa (buen soporte, supongo). No he encontrado mucha información sobre este. ¿Existe alguna documentación, API o ejemplos sobre cómo usar este SDK? ¿Alguien sabe cómo descargar la versión demo? (el enlace parece estar roto la última vez que lo intenté)
- iPrint SDK: SDK comercial. Algunos ejemplos en su página web pero nada más.
- Zebralink: Solo para impresoras Zebra (naturalmente). Otros fabricantes probablemente tienen API para sus impresoras también.
Google Play Apps
- PrinterShare: Comercial (clave Premium)
- Bluetooth Smart Printing: gratis y ligero. Reclamaciones para imprimir en impresoras bluetooth.
Idealmente, no me gustaría estar vinculado a una marca específica o modelo de impresora. Ahora las preguntas:
- ¿Cuál crees que sería la mejor opción?
- ¿Conoces alguna otra alternativa que me haya perdido?
- ¿Puedo imprimir fácilmente archivos desde mi aplicación usando una aplicación externa?
- ¿Qué formato debo usar para que mis archivos puedan imprimirlos a través de Bluetooth? (pdf, imagenes, etc.)
- ¿Algún consejo sobre el fabricante y los modelos de impresoras?
- ¿Has tenido alguna experiencia real en la impresión a través de Bluetooth en Android?
- ¿Hay planes en el futuro inmediato para implementar la impresión Bluetooth en Android?
Gracias de antemano por tu ayuda ;)
La posibilidad de imprimir en la impresora BlueTooth depende en gran medida del modelo de impresora que intenta utilizar.
Por ejemplo, uso la impresora CITIZEN CMP-10BT que se puede controlar mediante el envío de secuencias específicas de bytes que se pueden hacer fácilmente mediante la API de Android. Incluso construí un marco encima de eso.
El problema radica únicamente en el hecho de que no puede estar seguro de qué modelos de impresora utilizarán los usuarios finales, por lo que definitivamente será necesario un SDK definitivo.
Puede descargar este componente: https://components.xamarin.com/view/ocpp-thermal-printer-usb Funciona como un encanto en la mayoría de las impresoras genéricas usb y bluetooth. Creo una clase para enviar los comandos esc más habituales. Uso: outerInstance.mService.Write (modes.pordefecto ());
public class modes
{
public static byte[] condensado()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x21;
cmd[2] |= 0x01;
return cmd;
}
public static byte[] pordefecto()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x21;
cmd[2] |= 0x00;
return cmd;
}
public static byte[] negrita()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x21;
cmd[2] |= 0x08;
return cmd;
}
public static byte[] lineamenor()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x33;
cmd[2] |= 0x14;
return cmd;
}
public static byte[] cancelalinea()
{
byte[] cmd = new byte[2];
cmd[0] = 0x1b;
cmd[1] = 0x32;
return cmd;
}
public static byte[] centra()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x61;
cmd[2] |= 0x01;
return cmd;
}
public static byte[] quitacentro()
{
byte[] cmd = new byte[3];
cmd[0] = 0x1b;
cmd[1] = 0x61;
cmd[2] |= 0x00;
return cmd;
}
public static byte[] codepage()
{
byte[] cmd = new byte[5];
cmd[0] = 0x1f;
cmd[1] = 0x1b;
cmd[2] = 0x1f;
cmd[3] |= 0xfe;
cmd[4] |= 0x01;
return cmd;
}
public static byte[] latino()
{
byte[] cmd = new byte[5];
cmd[0] = 0x1f;
cmd[1] = 0x1b;
cmd[2] = 0x1f;
cmd[3] |= 0xff;
cmd[4] |= 0x12;
return cmd;
}
public static byte[] logo()
{
byte[] cmd = new byte[4];
cmd[0] = 0x1c;
cmd[1] = 0x70;
cmd[2] = 0x01;
cmd[3] |= 0x00;
return cmd;
}
}
Star Micronics tiene un SDK para la impresión de Android a través de Bluetooth (así como Ethernet y USB). Puede descargarlo aquí: http://www.starmicronics.com/support/SDKDocumentation.aspx .
Como mencionó, no puede imprimir de forma nativa en este momento, por lo que las soluciones alternativas que encontró hoy son sus opciones.
En mi experiencia, es mejor usar una API y no una aplicación externa. La razón principal es que obtienes control total sobre el comportamiento de la impresora. También es fácil si la API se construye de forma inteligente. El uso de una aplicación externa es limitante porque no puede personalizar sus impresiones de la forma que desea.
El Star SDK al que te vinculé tiene una aplicación de muestra realmente agradable que te permite probar y personalizar muchas funciones de la impresora para verlas en acción. Cada función está documentada en el código fuente. Los comandos y sus parámetros también están disponibles en la propia aplicación como una referencia rápida en pantalla que es conveniente. Además de todo eso, está bien documentado.
Star es una gran compañía con la que trabajar porque puede obtener una impresora demo gratuita de su elección para usar en su desarrollo.
Si elige esta opción, puede enviar texto sin formato a la impresora junto con los comandos. La API se encarga de convertir los datos en lo que la impresora puede entender.