2012-03-23 31 views
22

Devo sviluppare un'app per tablet Android che richiede la stampa di file su una stampante Bluetooth . La stampa tramite Bluetooth è una delle funzionalità più importanti della mia app. Sfortunatamente, non ci sono molte informazioni su questo argomento, quindi mi piacerebbe chiedere un consiglio.Android: stampa Bluetooth

Per quanto ne so non è possibile stampare su Bluetooth su Android (utilizzando chiamate native), poiché lo Stack BT di Android non implementa BPP (Profilo di stampa di base). Facendo una piccola ricerca ho trovato le seguenti alternative:

SDK/librerie

  • Sybase-iAnywhere-Blue-SDK-for-Android: SDK commerciale che supporta un sacco di profili BT. Sviluppato da una grande azienda (buon supporto I ipotesi). Non ho trovato molte informazioni su questo. ci sono documentazione, API o esempi su come utilizzare questo SDK? qualcuno sa come scaricare la versione demo? (il collegamento sembra essere interrotto l'ultima volta che ho provato)
  • SDR iPrint: SDK commerciale. Alcuni esempi sul loro sito web ma nient'altro.
  • Zebralink: solo per stampanti Zebra (naturalmente). Altri produttori probabilmente hanno API per le loro stampanti.

Google Play Apps

  • PrinterShare: Commercial (tasto Premium)
  • Bluetooth Smart Printing: libero e leggero. Richiede di stampare su stampanti Bluetooth.

Idealmente non vorrei essere legato a un marchio specifico o modello di stampante. Ora le domande:

  • Quale pensi che sarebbe la scelta migliore?
  • Conosci qualche altra alternativa che mi sia sfuggita?
  • Posso stampare facilmente i file dalla mia app utilizzando un'app esterna?
  • Quale formato devo usare per i miei file per poterli stampare su Bluetooth? (pdf, immagini, ecc.)
  • Qualche consiglio sul produttore e sui modelli di stampanti?
  • Hai avuto un'esperienza reale di stampa tramite Bluetooth su Android?
  • Ci sono piani nell'immediato futuro per implementare la stampa Bluetooth su Android?

Grazie in anticipo per il vostro aiuto;)

+0

posso garantire per la ** ** PrinterShare app - https://play.google.com/store/apps/details?id=com.dynamixsoftware.printershare - funziona sui miei dispositivi per la mia HP Stampante mobile Officejet 100. Tuttavia, non ho trovato l'app ** Bluetooth Smart Printing ** in Google Play. Avete un link? –

risposta

11

Star Micronics ha uno SDK per la stampa Android via Bluetooth (così come Ethernet e USB). Puoi scaricarlo qui: http://www.starmicronics.com/support/SDKDocumentation.aspx.

Come accennato, non è possibile stampare in modo nativo in questo momento, quindi le soluzioni alternative trovate sono le opzioni attuali.

In base alla mia esperienza, è preferibile utilizzare un'API e non un'applicazione esterna. Il motivo principale è il controllo totale sul comportamento della stampante. È facile anche se l'API è costruita in modo intelligente. L'utilizzo di un'app esterna è limitante perché non puoi personalizzare le tue stampe come preferisci.

Lo Star SDK con cui ti ho collegato ha un'app di esempio davvero piacevole che ti consente di testare e personalizzare molte funzioni della stampante per vederle in azione. Ogni funzione è documentata nel codice sorgente. I comandi e i relativi parametri sono anche disponibili nell'app stessa come riferimento rapido sullo schermo, che è conveniente. Oltre a tutto ciò, è ben documentato.

Star è una grande azienda con cui collaborare perché puoi ottenere una stampante demo gratuita di tua scelta da utilizzare per il tuo sviluppo.

Se si sceglie in questo modo, è possibile inviare testo in chiaro alla stampante insieme ai comandi. L'API gestisce la conversione dei dati in ciò che la stampante può capire.

+1

Star micronics è un sdk privo di licenza. – blackjack

+0

È STARIOSDK può essere utile per la stampa di tutti i tipi di file. – blackjack

+1

Sai se l'SDK funziona con altre marche di stampanti Bluetooth? –

1

La possibilità di stampare sulla stampante BlueTooth dipende in gran parte dal modello di stampante che si sta tentando di utilizzare.

Per esempio, utilizzo la stampante CITIZEN CMP-10BT che può essere controllata inviando specifiche sequenze di byte che possono essere facilmente eseguite utilizzando l'API di Android. Ho persino costruito un framework su questo.

Il problema sta solo nel fatto che non si può dire con certezza quali modelli di stampante saranno usati dagli utenti finali, quindi un SDK finale sarà sicuramente di grande utilità.

+0

Grazie per la risposta, Alex. Per curiosità, è il "quadro" che menzioni open source. E, se sì, dove potrebbe trovarlo? Grazie. –

+0

@ Josh Pinter: Purtroppo no. Fa parte del progetto commerciale quindi non c'è posto dove possa essere "trovato". Se sei ancora interessato, puoi scrivermi un'email (vedi l'indirizzo nel profilo) e potrei fornire alcune parti del codice necessarie per la stampa. –

+0

Grazie, Alex. Non ho trovato il tuo indirizzo email ma penso di avere quello che sto cercando, per ora. Apprezzo la tua offerta di aiuto, però. –

1

È possibile scaricare questo componente: https://components.xamarin.com/view/ocpp-thermal-printer-usb funziona come un fascino nella maggior parte delle stampanti generiche usb e bluetooth. Creo una classe per inviare i comandi esc più comuni. 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; 
    } 
}