我有这个登录屏幕,根本没有文本字段。当用户使用rfid扫描程序扫描他的id令牌时,我会得到一个8个字符长的字符串。它与使用键盘的原理相同(只是更快)。我希望我的登录活动在用户扫描他的令牌时行动,而不是之前。实现这个有一个聪明的方法吗?我没有任何按钮或文本字段,所以我必须在不收听EditText字段的情况下读取键盘输入。
所以,一个带有图像(锁定)的空屏幕,它会监听rfid阅读器(或键盘)并在字符数为8时执行。
答案 0 :(得分:7)
如果您在onKeyDown()
中实施Activity
并且没有其他UI小部件可以处理关键事件,那么您应该从键盘上按下每个按键。以下示例至少适用于A-Z,旨在将按键“打印”到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);
}
}