If your Android app already builds a document, receipt, or label using android.print.PrintManager, you can send it to any Bluetooth or USB thermal printer your user owns — without bundling a printer SDK, without targeting a specific command language, and without asking the user to install anything inside your app. Bluetooth Printer+ registers as a standard Android PrintService; once installed, every paired thermal printer shows up directly in the system print dialog for any app on the device.
Why this matters for developers
Most thermal-printer integrations mean picking a vendor SDK, wiring up Bluetooth socket handling yourself, and hand-rolling ESC/POS commands for every receipt layout. That’s real work for a feature that’s often a small part of your app. Because Bluetooth Printer+ hooks into Android’s own print framework, your app never talks to the printer directly — you call the same PrintManager API you’d use to print to any other printer, and Bluetooth Printer+ handles discovery, rendering, and the actual print job on the other side.
How the Android Bluetooth print service works
Bluetooth Printer+ implements Android’s PrintService and PrinterDiscoverySession classes. Once a user pairs a Bluetooth thermal printer with their phone and enables Bluetooth Printer+ as a print service (Settings → Connected devices → Printing), that printer appears by its own Bluetooth device name in the system print picker — for every app on the device, not just Bluetooth Printer+ itself. When your app hands a document to PrintManager, Android routes it to the print service backing whichever printer the user selected; Bluetooth Printer+ then renders the page and streams it to that specific paired device over its open Bluetooth socket.
Integrating Bluetooth thermal printing from your own app (PrintManager)
There is no library to add and no dependency to import. Use Android’s standard print framework exactly as documented for any other printer:
PrintManager printManager = (PrintManager) getSystemService(Context.PRINT_SERVICE);
PrintDocumentAdapter adapter = new MyPrintDocumentAdapter(context, myContent);
printManager.print("My Receipt", adapter, new PrintAttributes.Builder().build());Calling print() opens the system print dialog. If the user has a Bluetooth printer paired and Bluetooth Printer+ enabled, that printer is already listed — your app doesn’t need to know Bluetooth Printer+ exists.
Supported paper sizes and print resolution
Bluetooth Printer+ exposes several standard media sizes through PrintAttributes.MediaSize, so your PrintDocumentAdapter can lay out content correctly before it’s sent to the printer:
- Default receipt roll — 180×250mm
- A4 — 210×297mm
- A5 — 148×210mm
- A6 — 105×148mm
- Roll paper — 200×300mm
Content is rendered at roughly 203 DPI (8 pixels per millimeter), the standard resolution for thermal receipt printers, and scaled to match the physical paper width reported by the connected device.
How print content is rendered and dithered
Thermal printers only print black or white per dot — there’s no greyscale. Bluetooth Printer+ renders your document to a bitmap, then applies dithering to approximate photos, logos, and shaded content using patterns of black and white dots instead of flat greyscale, which is what keeps printed receipts and labels legible instead of turning into solid black blocks. Two dithering algorithms are used depending on content: Floyd-Steinberg for general documents, and Jarvis-Judice-Ninke for higher-fidelity reproduction of PDF pages and images. Tall pages are automatically split into chunks to work around the 255-pixel height limit of the ESC/POS raster image command.
Best practices for apps sending print jobs
- Design in black and white first. Test how your layout looks after dithering — dense color photos and thin colored text can lose legibility more than plain black text or line art.
- Match your content width to the paper size the user selects rather than assuming 58mm or 80mm — Bluetooth Printer+ reports the real paper size through
PrintAttributes, so build yourPrintDocumentAdapterto lay out against it instead of hardcoding a width. - Keep receipts short. Every additional printed line costs real time and paper on a thermal printer; render only what the user needs at the counter.
- Don’t assume a specific printer brand. Because rendering happens as a bitmap at the print-service layer, your app doesn’t need to know or care what thermal printer is on the other end.
Requirements for end users
- Android 6.0 (API 23) or later
- Bluetooth Printer+ installed from Google Play
- A Bluetooth or USB thermal printer, paired via Android Bluetooth settings
- Bluetooth Printer+ enabled as a print service under Settings → Connected devices → Printing
FAQ: Android Bluetooth printing without an SDK
Do I need an API key or SDK dependency to use this?
No. There is nothing to install in your app. You use Android’s own android.print.PrintManager class, the same API used for printing to any other printer.
Does this work if the user doesn’t have Bluetooth Printer+ installed?
Your print flow works exactly as it does today; the printer simply won’t be listed in the system print dialog until the user installs and enables Bluetooth Printer+.
Which printer command languages are supported?
Bluetooth Printer+ renders documents as bitmaps and sends them using ESC/POS raster printing (the GS v 0 bit-image command), which is supported by the large majority of Bluetooth and USB thermal receipt printers on the market.
Can I detect programmatically whether the user has it installed?
Not directly — Android’s print picker handles availability automatically. Link users to the Play Store listing if you want to prompt installation.
How to print to a Bluetooth printer from an Android app without an SDK?
Call Android’s built-in PrintManager.print() as you would for any printer. If the user has a Bluetooth thermal printer paired and Bluetooth Printer+ enabled as a print service, it appears in the system print dialog automatically — no vendor SDK required.
Does Android PrintManager support Bluetooth thermal printers?
Not on its own — PrintManager is command-language and transport agnostic; it relies on an installed PrintService to actually talk to a given printer. Bluetooth Printer+ is that print service for Bluetooth and USB thermal printers.