2

テキストフィールドがまったくないこのログオン画面があります。ユーザーが ID トークンを rfid スキャナーでスキャンすると、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 に答える