├── AndroidManifest.xml ├── README.md ├── com └── pradeep │ ├── adapter │ └── USBAdapter.java │ ├── printer │ └── PrintOrder.java │ └── usbprinter │ └── MainActivity.java └── res └── xml └── device_filter.xml /AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 19 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Android-USB-printer 2 | =================== 3 | 4 | This app can connect and print messages to any USB printer via android. 5 | -------------------------------------------------------------------------------- /com/pradeep/adapter/USBAdapter.java: -------------------------------------------------------------------------------- 1 | package com.pradeep.adapter; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.app.Activity; 5 | import android.app.PendingIntent; 6 | import android.content.BroadcastReceiver; 7 | import android.content.Context; 8 | import android.content.Intent; 9 | import android.content.IntentFilter; 10 | import android.database.sqlite.SQLiteDatabase; 11 | import android.hardware.usb.UsbConstants; 12 | import android.hardware.usb.UsbDevice; 13 | import android.hardware.usb.UsbDeviceConnection; 14 | import android.hardware.usb.UsbEndpoint; 15 | import android.hardware.usb.UsbInterface; 16 | import android.hardware.usb.UsbManager; 17 | import android.os.Bundle; 18 | import android.util.Log; 19 | import android.widget.Toast; 20 | 21 | public class USBAdapter{ 22 | private UsbManager mUsbManager; 23 | private UsbDevice mDevice; 24 | private PendingIntent mPermissionIntent; 25 | UsbDeviceConnection connection; 26 | String TAG = "USB"; 27 | 28 | public USBAdapter(){ 29 | 30 | } 31 | 32 | public void createConn(Context context) { 33 | mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); 34 | final String ACTION_USB_PERMISSION = "com.pradeep.usbprinter.USB_PERMISSION"; 35 | mPermissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0); 36 | IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION); 37 | context.registerReceiver(mUsbReceiver, filter); 38 | } 39 | 40 | private static final String ACTION_USB_PERMISSION = 41 | "com.pradeep.usbprinter.USB_PERMISSION"; 42 | private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 43 | 44 | public void onReceive(Context context, Intent intent) { 45 | String action = intent.getAction(); 46 | if (ACTION_USB_PERMISSION.equals(action)) { 47 | synchronized (this) { 48 | mDevice = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 49 | 50 | if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { 51 | if(mDevice != null){ 52 | //call method to set up device communication 53 | } 54 | } 55 | else { 56 | Log.d(TAG, "permission denied for device " + mDevice); 57 | } 58 | } 59 | } 60 | } 61 | }; 62 | 63 | @SuppressLint("NewApi") 64 | public void printMessage(Context context,String msg) { 65 | // TODO Auto-generated method stub 66 | final String printdata = msg; 67 | final UsbEndpoint mEndpointBulkOut; 68 | if (mUsbManager.hasPermission(mDevice)){ 69 | UsbInterface intf = mDevice.getInterface(0); 70 | for (int i = 0; i < intf.getEndpointCount(); i++) { 71 | UsbEndpoint ep = intf.getEndpoint(i); 72 | if (ep.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK) { 73 | if (ep.getDirection() == UsbConstants.USB_DIR_OUT) { 74 | mEndpointBulkOut = ep; 75 | connection = mUsbManager.openDevice(mDevice); 76 | if(connection!=null) 77 | { 78 | Log.e("Connection:"," connected"); 79 | Toast.makeText(context, "Device connected", Toast.LENGTH_SHORT).show(); 80 | } 81 | boolean forceClaim = true; 82 | connection.claimInterface(intf, forceClaim ); 83 | Integer res = connection.bulkTransfer(mEndpointBulkOut, printdata.getBytes(), printdata.getBytes().length, 10000); 84 | new Thread(new Runnable() 85 | { 86 | @Override 87 | public void run() 88 | { 89 | // TODO Auto-generated method stub 90 | Log.i("Thread:", "in run thread"); 91 | byte[] bytes = printdata.getBytes(); 92 | int b = connection.bulkTransfer(mEndpointBulkOut, bytes, bytes.length, 100000); 93 | Log.i("Return Status", "b-->" + b); 94 | } 95 | }).start(); 96 | 97 | connection.releaseInterface(intf); 98 | break; 99 | } 100 | } 101 | } 102 | }else{ 103 | mUsbManager.requestPermission(mDevice, mPermissionIntent); 104 | Toast.makeText(context, "Device have no permission", Toast.LENGTH_SHORT).show(); 105 | } 106 | } 107 | @SuppressLint("NewApi") 108 | public void closeConnection(Context context){ 109 | BroadcastReceiver mUsbReceiver = new BroadcastReceiver() { 110 | public void onReceive(Context context, Intent intent) { 111 | String action = intent.getAction(); 112 | 113 | if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) { 114 | UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); 115 | if (device != null) { 116 | Toast.makeText(context, "Device closed", Toast.LENGTH_SHORT).show(); 117 | connection.close(); 118 | } 119 | } 120 | } 121 | }; 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /com/pradeep/printer/PrintOrder.java: -------------------------------------------------------------------------------- 1 | package com.pradeep.printer; 2 | 3 | import java.io.IOException; 4 | import android.content.Context; 5 | import com.pradeep.adapter.USBAdapter; 6 | 7 | public class PrintOrder { 8 | 9 | public PrintOrder(){ 10 | 11 | } 12 | 13 | public void Print(Context context,String msg){ 14 | USBAdapter usba = new USBAdapter(); 15 | usba.createConn(context); 16 | try { 17 | usba.printMessage(context,msg); 18 | usba.closeConnection(context); 19 | } catch (Exception e) { 20 | // TODO Auto-generated catch block 21 | e.printStackTrace(); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /com/pradeep/usbprinter/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.pradeep.usbprinter; 2 | 3 | import com.pradeep.printer.PrintOrder; 4 | 5 | import android.app.ActionBar; 6 | import android.app.Activity; 7 | import android.app.AlertDialog; 8 | import android.content.Context; 9 | import android.os.Bundle; 10 | import android.util.Log; 11 | import android.widget.Toast; 12 | 13 | public class PrintMessage extends Activity{ 14 | 15 | protected void onCreate(Bundle icicle) { 16 | super.onCreate(icicle); 17 | setContentView(R.layout.main); 18 | String msg = "This is a test message"; 19 | PrintOrder printer = new PrintOrder(); 20 | printer.Print(this,msg); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /res/xml/device_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | --------------------------------------------------------------------------------