Как распечатать штрих-код и текстовый файл на USB-принтере
Эй, ребята, мне нужно распечатать штрих-код и текстовый файл на USB-принтере. Я почти закончил, моя проблема в том, что печать штрих-кода свернута, смотрите вывод ниже. Что я пытаюсь, так это MainActivity
class MainActivity extends Activity {
GZxingEncoder Encoder;
ImageView img;
UsbManager mUsbManager;
UsbDevice mDevice;
private UsbDeviceConnection mConnection;
private UsbInterface mInterface;
private UsbEndpoint mEndPoint;
private PendingIntent mPermissionIntent;
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
private static Boolean forceCLaim = true;
HashMap<String, UsbDevice> mDeviceList;
Iterator<UsbDevice> mDeviceIterator;
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.activity_main);
setContentView(R.layout.activity_main);
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mDeviceList = mUsbManager.getDeviceList();
mDeviceIterator = mDeviceList.values().iterator();
Encoder = GZxingEncoder.getInstance();
Encoder.initalize(MainActivity.this);
Toast.makeText(this, "Device List Size: " + String.valueOf(mDeviceList.size()), Toast.LENGTH_SHORT).show();
String usbDevice = "";
//This is just testing what devices are connected
while (mDeviceIterator.hasNext()) {
UsbDevice usbDevice1 = mDeviceIterator.next();
usbDevice += "\n" +
"DeviceID: " + usbDevice1.getDeviceId() + "\n" +
"DeviceName: " + usbDevice1.getDeviceName() + "\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;
if (mDevice == null) {
Toast.makeText(this, "mDevice is null", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "mDevice is not null", Toast.LENGTH_SHORT).show();
}
// textView.setText(usbDevice);
}
if (mDevice == null) {
Toast.makeText(this, "mDevice is null", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "mDevice is not null", Toast.LENGTH_SHORT).show();
}
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);
img = (ImageView) findViewById(R.id.im);
Button barcode = findViewById(R.id.pr);
barcode.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
print(mConnection,mInterface);
} catch (WriterException | IOException e) {
e.printStackTrace();
}
// printBarcode(mConnection, mInterface);
}
});
}
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!";
}
}
//Broadcast receiver to obtain permission from user for connection
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(0);
mConnection = mUsbManager.openDevice(device);
//setup();
}
} else {
//Log.d("SUB", "permission denied for device " + device);
Toast.makeText(context, "PERMISSION DENIED FOR THIS DEVICE", Toast.LENGTH_SHORT).show();
}
}
}
}
};
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Toast.makeText(getApplicationContext(), "onActivityResult",
Toast.LENGTH_SHORT).show();
}
private void print(UsbDeviceConnection connection,UsbInterface intrface) throws WriterException, IOException {
String test = "\nBarcode :115"+" "+"\nheeee haaaa 2Adcd"+" "+"\nDate:2017-10-31"+" "+"Time:12:31pm"+" "+"\n ---------------------------"+" "+"\n 31-2 32-2 33-2" +"\n 35-2 36-2 37-2 "+"\n 39-2"+" "+"\n----------------------------\n"+" ";
byte[] testBytes = test.getBytes();
img.setImageBitmap(Encoder.generateBarCode_general("115"));
Bitmap image = Encoder.generateBarCode_general("115");
// Bitmap bmp = BitmapFactory.decodeResource(getResources(),image);
byte[] comd = Utils.decodeBitmap(image);
//byte[] out = new byte[testBytes.length + comd.length];
byte[] combined = new byte[testBytes.length + comd.length];
for (int i = 0; i < combined.length; ++i)
{
combined[i] = i < testBytes.length ? testBytes[i] : comd[i - testBytes.length];
}
connection.claimInterface(intrface, forceCLaim);
connection.bulkTransfer(mEndPoint,combined,combined.length,50000);
connection.close();
}
}
Мой вывод
если я распечатаю штрих-код отдельно, он работает хорошо. Я не знаю, чего мне не хватает. Если кто-нибудь найдет ошибку, пожалуйста, пингуйте меня.