android get barcode scanner input without edittext

XeniaSis picture XeniaSis · Jul 22, 2016 · Viewed 8k times · Source

I have a physical barcode scanner and I want to get it's input, i.e the barcode, in the app without having a focused EditText.

I tried adding a KeyListener in my Activity. However, none of its implemented methods (onKeyUp, onKeyDown etc) was called.

Then I added the dispatchKeyEvent, which worked, but is never called as many times as the barcode length. Instead, before the barcode is read, some random button in my view gets focus from the barcode scanner.

String barcode = "";

@Override
public boolean dispatchKeyEvent(KeyEvent e) {
    char pressedKey = (char) e.getUnicodeChar();
    barcode += pressedKey;
    if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
        Toast.makeText(getApplicationContext(), "barcode--->>>" + barcode, Toast.LENGTH_LONG)
                .show();
    }

    return super.dispatchKeyEvent(e);
}

I've seen a few questions out there in SO but none really gave a concrete answer.

Answer

Hpsaturn picture Hpsaturn · May 24, 2018

For me, for a barcode scanner (USB, reference STA pcs) works the next code:

@Override
public boolean dispatchKeyEvent(KeyEvent e) {

    if(e.getAction()==KeyEvent.ACTION_DOWN){
        Log.i(TAG,"dispatchKeyEvent: "+e.toString());
        char pressedKey = (char) e.getUnicodeChar();
        barcode += pressedKey;
    }
    if (e.getAction()==KeyEvent.ACTION_DOWN && e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
        Toast.makeText(getApplicationContext(), 
            "barcode--->>>" + barcode, Toast.LENGTH_LONG)
        .show();

        barcode="";
    }

    return super.dispatchKeyEvent(e);
}