UsbOperation.java
3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package com.diligrp.printer.utils;
import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.Build;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;
import com.android.print.sdk.PrinterInstance;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR1)
public class UsbOperation implements IPrinterOpertion {
private final static String TAG = "UsbOpertion";
private Context mContext;
private Handler mHandler;
private PrinterInstance mPrinter;
private UsbDevice mDevice;
private boolean hasRegDisconnectReceiver;
private IntentFilter filter;
private List<UsbDevice> deviceList;
public UsbOperation(Context context, Handler handler) {
mContext = context;
mHandler = handler;
hasRegDisconnectReceiver = false;
filter = new IntentFilter();
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
}
public void open(Intent data) {
mDevice = data.getParcelableExtra(UsbManager.EXTRA_DEVICE);
mPrinter = new PrinterInstance(mContext, mDevice, mHandler);
// default is gbk...
// mPrinter.setEncoding("gbk");
mPrinter.openConnection();
}
public void close() {
if (mPrinter != null) {
mPrinter.closeConnection();
mPrinter = null;
}
if (hasRegDisconnectReceiver) {
mContext.unregisterReceiver(myReceiver);
hasRegDisconnectReceiver = false;
}
}
private final BroadcastReceiver myReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "receiver is: " + action);
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
// xxxxx
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
UsbDevice device = (UsbDevice) intent
.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (device != null && mPrinter != null
&& mPrinter.isConnected() && device.equals(mDevice)) {
close();
}
}
}
};
public PrinterInstance getPrinter() {
if (mPrinter != null && mPrinter.isConnected()) {
if (!hasRegDisconnectReceiver) {
mContext.registerReceiver(myReceiver, filter);
hasRegDisconnectReceiver = true;
}
}
return mPrinter;
}
@Override
public void chooseDevice() {
}
public void usbAutoConn(UsbManager manager) {
doDiscovery(manager);
if (!deviceList.isEmpty()) {
mDevice = deviceList.get(0);
}
if (mDevice != null) {
mPrinter = new PrinterInstance(mContext, mDevice, mHandler);
mPrinter.openConnection();
} else {
Toast.makeText(mContext, "opened failed!", Toast.LENGTH_SHORT).show();
}
}
private void doDiscovery(UsbManager manager) {
HashMap<String, UsbDevice> devices = manager.getDeviceList();
deviceList = new ArrayList<UsbDevice>();
for (UsbDevice device : devices.values()) {
if (USBPortService.isUsbPrinter(device)) {
deviceList.add(device);
}
}
}
@Override
public void btAutoConn(Context context, Handler mHandler) {
}
}