扫描条形码

时间:2016-06-23 14:34:43

标签: java android printing bluetooth zxing

我正在为此项目使用蓝牙打印机和zxing条形码扫描仪。我的问题是,在连接蓝牙打印机后,我尝试使用zxing扫描条形码,它会断开蓝牙打印机的连接。这是我的代码。

package com.zj.printdemo;

import com.zj.printdemo.R;
import android.app.Fragment;
import android.content.Intent;
import com.zj.btsdk.BluetoothService;
import com.zj.btsdk.PrintPic;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import android.view.View.OnClickListener;
import android.util.Log;
import android.view.ViewGroup;

public class PrintDemo extends Activity {
    Button btnSearch;
    Button btnSendDraw;
    Button btnSend;
    //Button btnClose;
    Button clearBtn;
    Button btnBarcode;
    EditText edtContext;
    EditText edtContextQTY;
    EditText edtPrint;
    private static final int REQUEST_ENABLE_BT = 2;
    BluetoothService mService = null;
    BluetoothDevice con_dev = null;
    private static final int REQUEST_CONNECT_DEVICE = 1;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        //Button clearBtn = (Button)findViewById(R.id.btnClear);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //edtContext = (EditText) findViewById(R.id.txt_content);
        mService = new BluetoothService(this, mHandler);
        if( mService.isAvailable() == false ){
            Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
            finish();
        }

        clearBtn = (Button)findViewById(R.id.btnClear);
        OnClickListener ClearOnClickListener = new OnClickListener(){
            @Override
            public void onClick(View v) {
                edtContext.setText("");
                edtContextQTY.setText("");
            }
        };
        clearBtn.setOnClickListener(ClearOnClickListener);

        btnBarcode = (Button) findViewById(R.id.btnBarcode);
        OnClickListener BarcodeOnClickListener = new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.btnBarcode) {
                    IntentIntegrator integrator = new IntentIntegrator(PrintDemo.this);
                    integrator.initiateScan();
                }
            }
        };
        btnBarcode.setOnClickListener(BarcodeOnClickListener);
}

    public void onStart() {
        super.onStart();
        if( mService.isBTopen() == false)
        {
            Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
        }
        try {
            btnSendDraw = (Button) this.findViewById(R.id.btn_test);
            btnSendDraw.setOnClickListener(new ClickEvent());
            btnSearch = (Button) this.findViewById(R.id.btnSearch);
            btnSearch.setOnClickListener(new ClickEvent());
            btnSend = (Button) this.findViewById(R.id.btnSend);
            btnSend.setOnClickListener(new ClickEvent());
            //btnClose = (Button) this.findViewById(R.id.btnClose);
            //btnClose.setOnClickListener(new ClickEvent());
            edtContext = (EditText) findViewById(R.id.txt_content);
            edtContextQTY = (EditText) findViewById(R.id.txt_contentQTY);
            //btnClose.setEnabled(false);
            btnSend.setEnabled(false);
            btnSendDraw.setEnabled(false);
        } catch (Exception ex) {
            Log.e("������Ϣ",ex.getMessage());
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mService != null)
            mService.stop();
        mService = null; 
    }

    class ClickEvent implements View.OnClickListener {
        public void onClick(View v) {
            if (v == btnSearch) {           
                Intent serverIntent = new Intent(PrintDemo.this,DeviceListActivity.class);
                startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
            } else if (v == btnSend) {
                String msg = edtContext.getText().toString();
                String msgQTY = edtContextQTY.getText().toString();
                if( msg.length() > 0 ){
                    mService.sendMessage("ItemID:"+msg+"\n","ItemQTY:"+msgQTY+"\n");
                }
            } //else if (v == btnClose) {
                //mService.stop();}
             else if (v == btnSendDraw) {
                String msg = "";
                String lang = getString(R.string.strLang);
                //printImage();

                byte[] cmd = new byte[3];
                cmd[0] = 0x1b;
                cmd[1] = 0x21;
                if((lang.compareTo("en")) == 0){    
                    cmd[2] |= 0x10;
                    mService.write(cmd);
                    mService.sendMessage("Congratulations!\n", "GBK"); 
                    cmd[2] &= 0xEF;
                    mService.write(cmd);
                    msg = "  You have sucessfully created communications between your device and our bluetooth printer.\n\n"
                          +"  the company is a high-tech enterprise which specializes" +
                          " in R&D,manufacturing,marketing of thermal printers and barcode scanners.\n\n";


                    mService.sendMessage(msg,"GBK");
                }else if((lang.compareTo("ch")) == 0){
                    cmd[2] |= 0x10;
                    mService.write(cmd);
                    mService.sendMessage("��ϲ����\n", "GBK"); 
                    cmd[2] &= 0xEF;
                    mService.write(cmd);
                    msg = "  ���Ѿ��ɹ��������������ǵ�������ӡ����\n\n"
                    + "  ����˾��һ��רҵ�����з�����������������Ʊ�ݴ�ӡ��������ɨ���豸��һ��ĸ߿Ƽ���ҵ.\n\n";

                    mService.sendMessage(msg,"GBK");    
                }
            }
        }
    }

    /**
     * Handler BluetoothService
     */
    private final  Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case BluetoothService.MESSAGE_STATE_CHANGE:
                switch (msg.arg1) {
                case BluetoothService.STATE_CONNECTED:
                    Toast.makeText(getApplicationContext(), "Connect successful",
                            Toast.LENGTH_SHORT).show();
                    //btnClose.setEnabled(true);
                    btnSend.setEnabled(true);
                    btnSendDraw.setEnabled(true);
                    break;
                case BluetoothService.STATE_CONNECTING:
                    Log.d("��������","��������.....");
                    break;
                case BluetoothService.STATE_LISTEN:
                case BluetoothService.STATE_NONE:
                    Log.d("StateNone","�ȴ�����.....");
                    break;
                }
                break;
            case BluetoothService.MESSAGE_CONNECTION_LOST:
                Toast.makeText(getApplicationContext(), "Device connection was lost",
                               Toast.LENGTH_SHORT).show();
                //btnClose.setEnabled(false);
                btnSend.setEnabled(false);
                btnSendDraw.setEnabled(false);
                break;
            case BluetoothService.MESSAGE_UNABLE_CONNECT:
                Toast.makeText(getApplicationContext(), "Unable to connect device",
                        Toast.LENGTH_SHORT).show();
                break;
            }
        }

    };

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case REQUEST_ENABLE_BT:
                if (resultCode == Activity.RESULT_OK) {
                    Toast.makeText(this, "Bluetooth open successful", Toast.LENGTH_LONG).show();
                } else {
                    finish();
                }
                break;
            case REQUEST_CONNECT_DEVICE:
                if (resultCode == Activity.RESULT_OK) {
                    String address = data.getExtras()
                            .getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
                    con_dev = mService.getDevByMac(address);

                    mService.connect(con_dev);
                }
                break;
            case IntentIntegrator.REQUEST_CODE:
                IntentResult scanningResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
                if (scanningResult != null) {
                    String scanContent = scanningResult.getContents();
                    String scanFormat = scanningResult.getFormatName();
                    //formatTxt.setText("FORMAT: " + scanFormat);
                    edtContext.setText(scanContent);
                } else {
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "No scan data received!", Toast.LENGTH_SHORT);
                    toast.show();
                }
                break;
        }
    }

    @SuppressLint("SdCardPath")
    private void printImage() {
        byte[] sendData = null;
        PrintPic pg = new PrintPic();
        pg.initCanvas(384);
        pg.initPaint();
        pg.drawImage(0, 0, "/mnt/sdcard/icon.jpg");
        sendData = pg.printDraw();
        mService.write(sendData);
    }
}

我的目标是连接打印机,扫描条形码,并打印带有ID和数量的标签。手动输入工作,打印机工作,条形码扫描工作。只有当您在连接打印机后使用条形码扫描仪时才会断开打印机。

0 个答案:

没有答案