扫码枪工具类
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 ='-';
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);
}
}