Einige Entwickler wollen, dass ihr Programm über einen normalen Drucker Textdateien ausdrucken kann.
Sei es für die Ausgabe von Log-Dateien oder für andere Dateien.
Das gleiche Problem hatte auch ich.
Mein Programm sollte einige Daten auslesen, in ein bestimmtes (vordefiniertes) Muster packen und speicher(als HTML-Datei).
Diese Datei sollte dann auf ein DIN A4 Blatt gedruckt werden.
Um anderen den Weg zu ersparen, alles googlen zu müssen. Habe ich hier den Code angehängt:

package com.x.y;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import android.os.AsyncTask;
import android.text.Html;
import android.text.Spanned;

public class PrintTask extends AsyncTask<Void, Void, Void> {

String printerAddress;
String printerPort;

    public PrintTask(String port) {
        printerAddress = ip;
        printerPort = port;
    }

    @Override
    protected Void doInBackground(Void... params){
        try{
        int PrinterPort =Integer.parseInt(printerPort);
        Socket clientSocket = null;
       DataOutputStream OutStream = null;

        // open connection
        clientSocket = new Socket(printerAddress, PrinterPort);
        // open data output stream
        OutStream = new DataOutputStream(clientSocket.getOutputStream());
        File f = new File("/sdcard/index.html");
        System.out.println("Reading from file.");
        StringBuilder text = new StringBuilder();
        Scanner scanner = new Scanner(new FileInputStream(f));
        String printthis = null;
        try {
          while (scanner.hasNextLine()){
            text.append(scanner.nextLine()+ "\r\n");
                String htmlcontent = text.toString();
                System.out.println(htmlcontent);
                // here comes the code from the html file
                 Spanned htmlencoded = Html.fromHtml(htmlcontent);
                 printthis = htmlcontent;

          }
              OutStream..writeChars(printthis);
              OutStream..equals(f);
        }
        finally{
          scanner.close();
        }
        System.out.println("Text read in: " + text);
        // close data stream and socket
        OutStream.close();
        clientSocket.close();
        }catch(IOException e){
            e.printStackTrace();
        }

        return null;
    }

    protected Void onPostExecute(Integer inte){
        return null;
    }

}

Dieser Code macht, einfach gesagt folgendes:
1. Öffnet einen Stream zum Drucker. IP und Port können über den Konstruktor (PrintTask) an den AsyncTask (Thread) übrgeben werden.
2. liest die Datei Zeile für Zeile ein und druckt diese aus. (Codiert in HTML)

Ich habe versucht, soweit wie mögich alle Fehler mit try-catch auszuschließen.
Dies muss aber ggf. angepasst werden.

Achtung:
Es müssen folgende Berechtigungen in der Manifest.xml gesetzt werden:

„android.permission.ACCESS_NETWORK_STATE“
„android.permission.ACCESS_WIFI_STATE“
„android.permission.INTERNET“
„android.permission.READ_EXTERNAL_STORAGE“