У меня есть приложение Android, которое отправляет данные с устройства Android, выступающего в качестве хоста для модели принтера Zebra GK420t, на принтер Zebra, есть щелчок btnPrint с событием, которое вызывает метод connectToPrinter () с следующий код:
UsbManager manager;
private void connectToPrinter(PendingIntent mPendingIntent) {
try {
manager = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
UsbDevice device = null;
for (String s : deviceList.keySet()) {
device = deviceList.get(s);
if (UsbDiscoverer.isZebraUsbDevice(device)) {
break;
}
}
if (manager != null && device != null) {
manager.requestPermission(device, mPendingIntent);
}
} catch (Exception ex) {
Toast.makeText(mContext, "From connectToPrinterAndPrint: " + ex.getMessage(), Toast.LENGTH_LONG).show();
ex.printStackTrace();
}
}
Intent mPendingIntent - это BroadCastReceiver, который включает мой следующий код:
private static final String ACTION_USB_PERMISSION =
"com.android.example.USB_PERMISSION";
private final BroadcastReceiver usbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
try {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
final UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
final UsbInterface intf = device.getInterface(0);
//final UsbEndpoint endpoint = intf.getEndpoint(0);
UsbEndpoint _endpoint = null;
for(int i = 0; i <= intf.getEndpointCount() -1; i ++){
if(intf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_BULK && intf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_OUT /*Indicates DataFlow From Host to Device*/ ){
_endpoint = intf.getEndpoint(i);
break;
}
}
final UsbEndpoint endpoint = _endpoint;
final UsbDeviceConnection connection = manager.openDevice(device);
if(connection.claimInterface(intf, forceClaim)){
//Toast.makeText(mContext, "claimInterface: Successful", Toast.LENGTH_LONG).show();
}
else {
//Toast.makeText(mContext, "claimInterface: Not Successful", Toast.LENGTH_LONG).show();
}
new Thread(new Runnable() {
public void run() {
Looper.prepare();
String printString = "^XA\n^FO20,10^A0,N,20,16^FDTest^FS\n^XZ";
/* PROBLEM HERE */ int val = connection.bulkTransfer(endpoint, printString.getBytes(), printString.getBytes().length, TIMEOUT);
Toast.makeText(mContext, "bulkTransfer returned: " + Integer.toString(val), Toast.LENGTH_LONG).show();
Looper.loop();
Looper.myLooper().quit();
}
}).start();
connection.close();
}
} else {
Log.d("SSTag", "permission denied for device " + device);
}
}
}
} catch (Exception ex) {
Toast.makeText(mContext, "From onReceive: " + ex.getMessage, Toast.LENGTH_LONG).show();
}
}
};
Но проблема в том, что строка, которая показывает Тост с текстом «вернул массовый перенос:» всегда печатает -1, что свидетельствует о сбое в массовом переносе, и принтер ничего не печатает,
Как получить массовый перенос для передачи буфера данных на принтер, чтобы принтер Zebra печатал предполагаемые данные,
Пожалуйста, сообщите, спасибо заранее,