Je dois développer une application pour les tablettes Android qui requiert l'impression de fichiers sur une imprimante Bluetooth. L'impression via Bluetooth est l'une des fonctionnalités les plus importantes de mon application. Malheureusement, il n'y a pas beaucoup d'informations sur ce sujet, donc je voudrais demander des conseils.
Pour autant que je sache, il n'est pas possible d'imprimer via Bluetooth sur Android (en utilisant les appels natifs), car BT Stack d'Android n'implémente pas BPP (Basic Printing Profile). ai trouvé les alternatives suivantes:
SDK/bibliothèques
Applications Google Play
Idéalement, je ne voudrais pas être lié à une marque ou à un modèle d'imprimante spécifique. Maintenant les questions:
Merci d'avance pour votre aide ;)
Star Micronics dispose d'un SDK pour Android impression via Bluetooth (ainsi que Ethernet et USB). Vous pouvez le télécharger ici: http://www.starmicronics.com/support/ SDKDocumentation.aspx .
Comme vous l'avez mentionné, vous ne pouvez pas imprimer en mode natif à ce stade, donc les solutions alternatives que vous avez trouvées sont vos options aujourd'hui.
D'après mon expérience, il est préférable d'utiliser une API et non une application externe. La principale raison est que vous obtenez un contrôle total sur le comportement de l'imprimante. C'est aussi facile si l'API est conçue intelligemment. L'utilisation d'une application externe est limitative car vous ne pouvez pas personnaliser vos impressions comme vous le souhaitez.
Le SDK Star auquel je vous ai lié a un exemple d'application vraiment sympa qui vous permet de tester et de personnaliser de nombreuses fonctions de l'imprimante pour les voir en action. Chaque fonction est documentée dans le code source. Les commandes et leurs paramètres sont également disponibles dans l'application elle-même comme référence rapide à l'écran, ce qui est pratique. En plus de tout cela, c'est bien documenté.
Star est une excellente entreprise avec laquelle travailler, car vous pouvez obtenir une imprimante de démonstration gratuite de votre choix à utiliser pour votre développement.
Si vous choisissez cette méthode, vous pouvez envoyer du texte brut à l'imprimante avec les commandes. L'API gère la conversion des données en ce que l'imprimante peut comprendre.
La possibilité d'imprimer sur une imprimante BlueTooth dépend fortement du modèle d'imprimante que vous essayez d'utiliser.
Par exemple, j'utilise CITIZEN CMP-10BT imprimante qui peut être contrôlée en envoyant des séquences spécifiques d'octets qui peuvent facilement être effectuées en utilisant Android API. J'ai même construit un framework en plus de cela.
Le problème réside uniquement dans le fait que vous ne pouvez pas savoir avec certitude quels modèles d'imprimantes seront utilisés par les utilisateurs finaux, de sorte que certains SDK ultimes auront certainement un grand besoin.
Vous pouvez télécharger ce composant: https://components.xamarin.com/view/ocpp-thermal-printer-usb il fonctionne comme un charme dans la plupart des imprimantes génériques usb et bluetooth. Je crée une classe pour envoyer les commandes esc les plus courantes. Utilisation: externalInstance.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;
}
}
Utilisez la bibliothèque Printooth pour tout type d'imprimantes, avec aucune configuration, une utilisation simple et une bonne documentation
https://github.com/mazenrashed/Printooth
Voici un exemple de code pour imprimer une ligne simple:
var printables = ArrayList<Printable>()
var printable = Printable.PrintableBuilder()
.setImage(image)
.setNewLinesAfter(1) // To provide n lines after sentence
.build()
printables.add(printable)
BluetoothPrinter.printer().print(printables)
Vous pouvez continuer à lire ici: https://github.com/mazenrashed/Printooth/blob/master/README.md