Как распечатать штрих-код и текстовый файл на 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();

}

 }

Мой вывод образ

если я распечатаю штрих-код отдельно, он работает хорошо. Я не знаю, чего мне не хватает. Если кто-нибудь найдет ошибку, пожалуйста, пингуйте меня.

0 ответов

Другие вопросы по тегам