2

我有这个登录屏幕,根本没有文本字段。当用户使用 rfid 扫描仪扫描他的 id 令牌时,我会得到一个 8 字符长的字符串。它与使用键盘的原理相同(只是更快)。我希望我的登录活动在用户扫描他的令牌时而不是之前采取行动。有没有一种聪明的方法来实现这一点?我没有任何按钮或文本字段,所以我必须在不听 EditText 字段的情况下阅读键盘输入。

因此,一个带有图像(锁)的空屏幕,它监听 rfid 阅读器(或键盘)并在字符数为 8 时采取行动。

4

1 回答 1

8

如果您onKeyDown()在您的实现Activity并且没有其他处理按键事件的 UI 小部件,您应该从键盘上获取每个按键。下面的示例应该至少适用于 AZ,并且旨在简单地将按键“打印”到TextView.

如果这还不够,您可能需要添加更复杂的方法将键码映射到字符。(例如空间不起作用,数字可能两者都没有)

public class KeyActivity extends Activity {
    // should work for a-z
    private static final Pattern KEYCODE_PATTERN = Pattern.compile("KEYCODE_(\\w)");

    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // there is just a TextView, nothing that handle keys
        mTextView = (TextView) findViewById(R.id.textView1);
    }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        String key = KeyEvent.keyCodeToString(keyCode);
        // key will be something like "KEYCODE_A" - extract the "A"

        // use pattern to convert int keycode to some character
        Matcher matcher = KEYCODE_PATTERN.matcher(key);
        if (matcher.matches()) {
            // append character to textview
            mTextView.append(matcher.group(1));
        }
        // let the default implementation handle the event
        return super.onKeyDown(keyCode, event);
    }
}
于 2012-08-22T09:49:29.413 回答