3

我正在创建一个 android 应用程序,其中包含来自通过 USB 连接的打印机的打印数据。在这里,我想设置页面布局,例如到达页面末尾时的换行打印和页面边框等。是否可以通过编程方式进行。请帮助我如何做到这一点。

这是我为打印数据所做的:

public class DemoPrinter extends Activity {

    private final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
    Button create_file;
    PendingIntent mPermissionIntent;
    UsbManager usbManager;
    UsbDevice device;
    EditText print_text;
    UsbDevice printer = null;
    private static final int PRINTER_VENDOR_ID = 1256;
    private String filename = "MySampleFile.txt";
    private String filepath = "PanelFilesstorage";
    File myInternalFile;

    String data= "This is a sample text";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        try 
        {
            setContentView(R.layout.activity_demo_printer);
            ContextWrapper contextWrapper = new ContextWrapper(getApplicationContext());
            File directory = contextWrapper.getDir(filepath, Context.MODE_PRIVATE);
            myInternalFile = new File(directory , filename);



            print_text = (EditText)findViewById(R.id.editText_printer);

            usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
            HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();

            if (deviceList.size() <= 0) 
            {
                Toast.makeText(getApplicationContext(), "Info: No device found", Toast.LENGTH_SHORT).show();
            }
            else 
            {
                Toast.makeText(getApplicationContext(), "No of devices"+deviceList.size(), Toast.LENGTH_SHORT).show();
                ((TextView) findViewById(R.id.textView_devices))
                        .setText("No of device : " + deviceList.size());
            }
            Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
            int count = 0;
            mPermissionIntent = PendingIntent.getBroadcast(getBaseContext(), 0,
                    new Intent(ACTION_USB_PERMISSION), 0);
            while (deviceIterator.hasNext()) {
                count++;
                device = deviceIterator.next();
                Log.i("info", "Device No " + count + "........");
                Log.i("info", "Vendor id : " + device.getVendorId());
                Log.i("info", "Product id : " + device.getProductId());
                Log.i("info", "Device  name : " + device.getDeviceName());
                Log.i("info", "Device class : " + device.getClass().getName());
                Log.i("info", "Device protocol: " + device.getDeviceProtocol());
                Log.i("info", "Device subclass : " + device.getDeviceSubclass());
                if (device.getVendorId() == PRINTER_VENDOR_ID) {
                    printer = device;
                    break;
                }
            }

            findViewById(R.id.button_print).setOnClickListener(
                    new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Log.i("Info", "Print command given");
                            IntentFilter filter = new IntentFilter(
                                    ACTION_USB_PERMISSION);
                            registerReceiver(mUsbReceiver, filter);
                            if (printer != null) {
                                usbManager.requestPermission(printer,
                                        mPermissionIntent);
                            } else {
                                Log.e("Exception", "Printer not found");
                            }
                        }
                    });

        } catch (Exception e) {
            Log.e("Exception", "Exception in onCreate " + e.getMessage());
            e.printStackTrace();
        }
        findViewById(R.id.button_create_file).setOnClickListener(new View.OnClickListener() 
        {

            @Override
            public void onClick(View v) 
            {

                try
                {
                    FileOutputStream fos = new FileOutputStream(myInternalFile+"\n");
                    fos.write(data.toString().getBytes());
                    fos.close();
                } 
                    catch (IOException e) 
                    {
                    e.printStackTrace();
                    }
            }
        });

    }

    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver()
    {

        @Override
        public void onReceive(Context context, Intent intent) 
        {
            try {
                String action = intent.getAction();
                if (ACTION_USB_PERMISSION.equals(action)) 
                {
                    synchronized (this)
                    {
                        final UsbDevice printerDevice = (UsbDevice) intent
                                .getParcelableExtra(UsbManager.EXTRA_DEVICE);
                        if (intent.getBooleanExtra(
                                UsbManager.EXTRA_PERMISSION_GRANTED, false)) 
                        {
                            if (printerDevice != null) {
                                Log.i("Info", "Device permission granted");
                                startPrinting(printerDevice);
                            }
                        } 
                        else
                        {
                            Log.d("Debug", "permission denied for device "
                                    + printerDevice);
                        }
                    }
                }
            } catch (Exception e) 
            {
                Log.e("Exception", "Exception in onRecieve " + e.getMessage());
                e.printStackTrace();
            }
        }

    };

    public void startPrinting(final UsbDevice printerDevice)
    {
        new Handler().post(new Runnable() 
        {
            UsbDeviceConnection conn;
            UsbInterface usbInterface;

            @Override
            public void run() 
            {
                try 
                {
                    Log.i("Info", "Bulk transfer started");
                    usbInterface = printerDevice.getInterface(0);
                    UsbEndpoint endPoint = usbInterface.getEndpoint(0);
                    conn = usbManager.openDevice(printer);
                    conn.claimInterface(usbInterface, true);

                    String myStringData = print_text.getText().toString();
                    myStringData+="\n";
                    byte[] array = myStringData.getBytes();
                    ByteBuffer output_buffer = ByteBuffer
                            .allocate(array.length);
                    UsbRequest request = new UsbRequest();
                    request.initialize(conn, endPoint);
                    request.queue(output_buffer, array.length);
                    if (conn.requestWait() == request) 
                    {
                        Log.i("Info", output_buffer.getChar(0) + "");
                        Message m = new Message();
                        m.obj = output_buffer.array();
                        // handler.sendMessage(m);
                        output_buffer.clear();
                    } 
                    else 
                    {
                        Log.i("Info", "No request recieved");
                    }
                     int transfered = conn.bulkTransfer(endPoint,
                     myStringData.getBytes(),
                     myStringData.getBytes().length, 5000);
                     Log.i("Info", "Amount of data transferred : " +transfered);

                } catch (Exception e) 
                {
                    Log.e("Exception", "Unable to transfer bulk data");
                    e.printStackTrace();
                } finally
                {
                    try
                    {
                        conn.releaseInterface(usbInterface);
                        Log.i("Info", "Interface released");
                        conn.close();
                        Log.i("Info", "Usb connection closed");
                        unregisterReceiver(mUsbReceiver);
                        Log.i("Info", "Brodcast reciever unregistered");
                    } 
                    catch (Exception e) 
                    {
                        Log.e("Exception",
                                "Unable to release resources because : "
                                        + e.getMessage());
                        e.printStackTrace();
                    }
                }

            }
        });
    }

    }
4

0 回答 0