使用扫码枪识别条形码

扫码枪工具类

import android.os.Handler;
import android.view.KeyEvent;

public class ScanGunKeyEventHelper {

	private final static long SCAN_DELAY = 150;
	private boolean mCaps;
	private StringBuffer mScanResult = new StringBuffer();
	private OnScanSuccessListener mOnScanSuccessListener;
	private Handler mScanResultStatus = new Handler();

	public ScanGunKeyEventHelper(OnScanSuccessListener onScanSuccessListener) {
		this.mOnScanSuccessListener = onScanSuccessListener;
	}

	public interface OnScanSuccessListener {
		void onScanSuccess(String result);
	}

	private void performScanSuccess() {
		String barcode = mScanResult.toString();
		if (mOnScanSuccessListener != null) {
			mOnScanSuccessListener.onScanSuccess(barcode);
		}
		mScanResult.setLength(0);
	}

	private final Runnable mScanningFishedRunnable = new Runnable() {

		@Override
		public void run() {
			performScanSuccess();
		}
	};

	public boolean processKeyEvent(KeyEvent event) {

		int keyCode = event.getKeyCode();
		checkLetterStatus(event);

		if (event.getAction() == KeyEvent.ACTION_DOWN) {

			char barCode = getInputCode(event);

			if (barCode != 0) {
				mScanResult.append(barCode);
			}
			if (keyCode == KeyEvent.KEYCODE_ENTER) {
				mScanResultStatus.removeCallbacks(mScanningFishedRunnable);
				mScanResultStatus.post(mScanningFishedRunnable);
			} else {
				mScanResultStatus.removeCallbacks(mScanningFishedRunnable);
				mScanResultStatus.postDelayed(mScanningFishedRunnable,
						SCAN_DELAY);
			}
		}
		return true;
	}

	private void checkLetterStatus(KeyEvent event) {
		int keyCode = event.getKeyCode();
		if (keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT
				|| keyCode == KeyEvent.KEYCODE_SHIFT_LEFT) {
			if (event.getAction() == KeyEvent.ACTION_DOWN) {
				mCaps = true;
			} else {
				mCaps = false;
			}
		}
	}

	private char getInputCode(KeyEvent event) {

		int keyCode = event.getKeyCode();
		char barCode;

		if (keyCode >= KeyEvent.KEYCODE_A && keyCode <= KeyEvent.KEYCODE_Z) {
			barCode = (char) ((mCaps ? 'A' : 'a') + keyCode - KeyEvent.KEYCODE_A);
		} else if (keyCode >= KeyEvent.KEYCODE_0
				&& keyCode <= KeyEvent.KEYCODE_9) {
			barCode = (char) ('0' + keyCode - KeyEvent.KEYCODE_0);
		} else {
			switch (keyCode) {
			case KeyEvent.KEYCODE_PERIOD:
				barCode = '.';
				break;
			case KeyEvent.KEYCODE_EQUALS:
				barCode = '=';
				break;
			case KeyEvent.KEYCODE_SEMICOLON:
				barCode = mCaps ? ':' : ';';
				break;
			case KeyEvent.KEYCODE_MINUS:
				//barCode = mCaps ? '-' : '_';	
				barCode ='-';
				break;
			default:
				barCode = 0;
				break;
			}
		}
		return barCode;
	}
}

扫码枪工具类的使用,主意要在Activity内重新onKeyDown()

public class MainActivity extends Activity {
   
    ScanGunKeyEventHelper mScanGunKeyEventHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();
    }

    private void initData() {
        mScanGunKeyEventHelper = new ScanGunKeyEventHelper(new ScanGunKeyEventHelper.OnScanSuccessListener() {

            @Override
            public void onScanSuccess(String mesg) {
				//获取到扫码成功后扫到的条码信息
                mesg = mesg.toUpperCase();
				//对扫到的条码信息进行处理和使用
            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        mScanGunKeyEventHelper.processKeyEvent(event);
        return super.onKeyDown(keyCode, event);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值