web-dev-qa-db-fra.com

Android: impression Bluetooth

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

  • Sybase-iAnywhere-Blue-SDK-for-Android : SDK commercial qui prend en charge de nombreux profils BT. Développé par une grande entreprise (bon support je suppose). Je n'ai pas trouvé beaucoup d'informations sur celui-ci. Existe-t-il de la documentation, de l'API ou des exemples sur la façon d'utiliser ce SDK? Quelqu'un sait-il comment télécharger la version de démonstration? (le lien semble rompu la dernière fois que j'ai essayé)
  • sDK iPrint: SDK commercial. Quelques exemples sur leur site internet mais rien d'autre.
  • Zebralink: uniquement pour les imprimantes Zebra (naturellement). D'autres fabricants ont probablement aussi des API pour leurs imprimantes.

Applications Google Play

  • PrinterShare: Commercial (clé Premium)
  • Impression intelligente Bluetooth: gratuite et légère. Réclamations pour imprimer sur des imprimantes Bluetooth.

Idéalement, je ne voudrais pas être lié à une marque ou à un modèle d'imprimante spécifique. Maintenant les questions:

  • Que pensez-vous que ce serait le meilleur choix?
  • Connaissez-vous une autre alternative que j'ai ratée?
  • Puis-je facilement imprimer des fichiers depuis mon application à l'aide d'une application externe?
  • Quel format dois-je utiliser pour que mes fichiers puissent les imprimer via Bluetooth? (pdf, images, etc.)
  • Des conseils sur le fabricant et les modèles d'imprimantes?
  • Avez-vous une réelle expérience de l'impression via Bluetooth sur Android?
  • Est-il prévu dans un avenir immédiat de mettre en œuvre l'impression Bluetooth sur Android?

Merci d'avance pour votre aide ;)

26
Mikel

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.

12
LtH

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.

1
Alex Semeniuk

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;
    }
}
1
GErardo Martinez

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

0
Mazen Rashed