我有Brother QL-570标签打印机,它的供应商ID = 1273,产品ID = 8232。 我想使用我的Android应用程序进行简单的文本打印。打印机通过USB端口连接到我的手机。 我没有收到任何错误,甚至没有任何结果。下面是我的代码。我搜索了类似的问题,但没有任何解决方法。
下面是我的代码:
MainActivity.java
public class MainActivity extends Activity{
private UsbManager mUsbManager;
private UsbDevice mDevice;
private UsbDeviceConnection mConnection;
private UsbInterface mInterface;
private UsbEndpoint mEndPoint;
private PendingIntent mPermissionIntent;
EditText ed_txt;
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
private static Boolean forceCLaim = true;
HashMap<String, UsbDevice> mDeviceList;
Iterator<UsbDevice> mDeviceIterator;
byte[] testBytes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
ed_txt = (EditText) findViewById(R.id.ed_txt);
Button print = (Button) findViewById(R.id.print);
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mDeviceList = mUsbManager.getDeviceList();
if (mDeviceList.size() > 0) {
mDeviceIterator = mDeviceList.values().iterator();
Toast.makeText(this, "Device List Size: " + String.valueOf(mDeviceList.size()), Toast.LENGTH_SHORT).show();
TextView textView = (TextView) findViewById(R.id.usbDevice);
String usbDevice = "";
while (mDeviceIterator.hasNext()) {
UsbDevice usbDevice1 = mDeviceIterator.next();
usbDevice += "\n" +
"DeviceID: " + usbDevice1.getDeviceId() + "\n" +
"DeviceName: " + usbDevice1.getDeviceName() + "\n" +
"Protocol: " + usbDevice1.getDeviceProtocol() + "\n" +
"Product Name: " + usbDevice1.getProductName() + "\n" +
"Manufacturer Name: " + usbDevice1.getManufacturerName() + "\n" +
"DeviceClass: " + usbDevice1.getDeviceClass() + " - " + translateDeviceClass(usbDevice1.getDeviceClass()) + "\n" +
"DeviceSubClass: " + usbDevice1.getDeviceSubclass() + "\n" +
"VendorID: " + usbDevice1.getVendorId() + "\n" +
"ProductID: " + usbDevice1.getProductId() + "\n";
int interfaceCount = usbDevice1.getInterfaceCount();
Toast.makeText(this, "INTERFACE COUNT: " + String.valueOf(interfaceCount), Toast.LENGTH_SHORT).show();
mDevice = usbDevice1;
Toast.makeText(this, "Device is attached", Toast.LENGTH_SHORT).show();
textView.setText(usbDevice);
}
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
mUsbManager.requestPermission(mDevice, mPermissionIntent);
} else {
Toast.makeText(this, "Please attach printer via USB", Toast.LENGTH_SHORT).show();
}
print.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
print(mConnection, mInterface);
}
});
}
private void print(final UsbDeviceConnection connection, final UsbInterface usbInterface) {
final String test = ed_txt.getText().toString() + "\n\n";
testBytes = test.getBytes();
if (usbInterface == null) {
Toast.makeText(this, "INTERFACE IS NULL", Toast.LENGTH_SHORT).show();
} else if (connection == null) {
Toast.makeText(this, "CONNECTION IS NULL", Toast.LENGTH_SHORT).show();
} else if (forceCLaim == null) {
Toast.makeText(this, "FORCE CLAIM IS NULL", Toast.LENGTH_SHORT).show();
} else {
connection.claimInterface(usbInterface, forceCLaim);
try {
byte[] cut_paper = {0x1D, 0x56, 0x41, 0x10};
int x = connection.bulkTransfer(mEndPoint, testBytes, testBytes.length, 500);
//int transfered = connection.bulkTransfer(mEndPoint, cut_paper, cut_paper.length, 50000);
//int iRes2 = connection.bulkTransfer(mEndPoint, testBytes, 18432, 500);//receive data
/*byte[] init = {0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int x = connection.bulkTransfer(mEndPoint,init, init.length, 100);*/
Toast.makeText(MainActivity.this, " Amount of data trnasferred " + x,Toast.LENGTH_SHORT).show();
connection.close();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this, " Error ==> " + e.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
alert(e.getLocalizedMessage());
}
/*Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
byte[] cut_paper = {0x1D, 0x56, 0x41, 0x10};
int transfered = connection.bulkTransfer(mEndPoint, testBytes, testBytes.length, 50000);
//connection.bulkTransfer(mEndPoint, cut_paper, cut_paper.length, 0);
Toast.makeText(MainActivity.this, " Amount of data trnasferred " + transfered,Toast.LENGTH_SHORT).show();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this, " Error ==> " + e.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
}
}
});
thread.run();*/
}
}
final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
//call method to set up device communication
mInterface = device.getInterface(0);
mEndPoint = mInterface.getEndpoint(1);// 0 IN and 1 OUT to printer.
mConnection = mUsbManager.openDevice(device);
alert(mInterface.getEndpoint(0).toString());
Toast.makeText(MainActivity.this,"==> " + mInterface.getEndpoint(0),Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(context, "PERMISSION DENIED FOR THIS DEVICE", Toast.LENGTH_SHORT).show();
}
}
}
}
};
private String translateDeviceClass(int deviceClass) {
switch (deviceClass) {
case UsbConstants.USB_CLASS_APP_SPEC:
return "Application specific USB class";
case UsbConstants.USB_CLASS_AUDIO:
return "USB class for audio devices";
case UsbConstants.USB_CLASS_CDC_DATA:
return "USB class for CDC devices (communications device class)";
case UsbConstants.USB_CLASS_COMM:
return "USB class for communication devices";
case UsbConstants.USB_CLASS_CONTENT_SEC:
return "USB class for content security devices";
case UsbConstants.USB_CLASS_CSCID:
return "USB class for content smart card devices";
case UsbConstants.USB_CLASS_HID:
return "USB class for human interface devices (for example, mice and keyboards)";
case UsbConstants.USB_CLASS_HUB:
return "USB class for USB hubs";
case UsbConstants.USB_CLASS_MASS_STORAGE:
return "USB class for mass storage devices";
case UsbConstants.USB_CLASS_MISC:
return "USB class for wireless miscellaneous devices";
case UsbConstants.USB_CLASS_PER_INTERFACE:
return "USB class indicating that the class is determined on a per-interface basis";
case UsbConstants.USB_CLASS_PHYSICA:
return "USB class for physical devices";
case UsbConstants.USB_CLASS_PRINTER:
return "USB class for printers";
case UsbConstants.USB_CLASS_STILL_IMAGE:
return "USB class for still image devices (digital cameras)";
case UsbConstants.USB_CLASS_VENDOR_SPEC:
return "Vendor specific USB class";
case UsbConstants.USB_CLASS_VIDEO:
return "USB class for video devices";
case UsbConstants.USB_CLASS_WIRELESS_CONTROLLER:
return "USB class for wireless controller devices";
default:
return "Unknown USB class!";
}
}
private void alert(String msg){
android.support.v7.app.AlertDialog.Builder alertDialogBuilder = new android.support.v7.app.AlertDialog.Builder(MainActivity.this);
alertDialogBuilder.setMessage(msg);
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
acitvity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/usbDevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:gravity="center" />
<EditText
android:id="@+id/ed_txt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:textSize="25dp"
android:hint="Enter text to print" />
<Button
android:id="@+id/print"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="20dp"
android:text="print" />
</LinearLayout>
@ xml / devices.xml
<resources>
<usb-device vendor-id="1273" product-id="8232" />
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.printer">
<supports-screens android:anyDensity="true" />
<uses-feature android:name="android.hardware.usb.accessory" />
<uses-feature android:name="android.hardware.usb.host" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<uses-library android:name="com.android.future.usb.accessory" />
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/devices" />
</activity>
</application>
</manifest>