2011-05-24 12 views
5

Hii en mi aplicación Quiero enviar mis datos directamente a mi impresora de red desde mi teléfono Android para imprimirlos. ¿Cómo puedo hacer eso?Android ¿Imprime directamente en la impresora de red?

También quiero proporcionar especificaciones como el diseño, las copias, el rango de páginas, etc. ¿Cómo puedo detectar mis impresoras directamente desde mi teléfono Android y también dar un comando de impresión?

+0

¿Está utilizando una impresora bluetooth? – Sujit

+0

Ya escribí una aplicación que escribe en impresoras bluetooth. En ese caso, solo tiene que emparejar el teléfono con el dispositivo y luego solo abrir un socket y escribir datos en él. –

+0

@sujit estoy usando una impresora de red – Harinder

Respuesta

1

Solo tiene que enviar su documento al Google Cloud Print. Aquí está el código que he usado para imprimir. El documento se guarda en el almacenamiento externo y está en formato pdf. El único requisito es que tanto el dispositivo como la impresora inalámbrica deben estar en la misma red. Si la impresora está cableada, el dispositivo Android y el sistema conectado a la impresora deben haber iniciado sesión con la misma cuenta de Google.

PrintManager printManager = (PrintManager) Order_Bag.this.getSystemService(Context.PRINT_SERVICE); 
String jobName = Order_Bag.this.getString(R.string.app_name) + " Document"; 
//printManager.print(jobName, pda, null); 
pda = new PrintDocumentAdapter(){ 

    @Override 
    public void onWrite(PageRange[] pages, ParcelFileDescriptor destination, CancellationSignal cancellationSignal, WriteResultCallback callback){ 
     InputStream input = null; 
     OutputStream output = null; 

     try { 

      input = new FileInputStream(Environment.getExternalStorageDirectory() + "/hello.pdf"); 
      output = new FileOutputStream(destination.getFileDescriptor()); 

      byte[] buf = new byte[1024]; 
      int bytesRead; 

      while ((bytesRead = input.read(buf)) > 0) { 
       output.write(buf, 0, bytesRead); 
      } 

      callback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES}); 

     } catch (FileNotFoundException ee){ 
      //Catch exception 
     } catch (Exception e) { 
      //Catch exception 
     } finally { 
      try { 
       input.close(); 
       output.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    @Override 
    public void onLayout(PrintAttributes oldAttributes, PrintAttributes newAttributes, CancellationSignal cancellationSignal, LayoutResultCallback callback, Bundle extras){ 

     if (cancellationSignal.isCanceled()) { 
      callback.onLayoutCancelled(); 
      return; 
     } 

     // int pages = computePageCount(newAttributes); 

     PrintDocumentInfo pdi = new PrintDocumentInfo.Builder("The invoice").setContentType(PrintDocumentInfo.CONTENT_TYPE_DOCUMENT).build(); 

     callback.onLayoutFinished(pdi, true); 
    } 
}; 

printManager.print(jobName, pda, null); 
Cuestiones relacionadas