├── 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 |
--------------------------------------------------------------------------------