2

Samsung Galaxy Note にはスタイラスがあり、スタイラスが画面に触れたり離れたりしたときに奇妙な動作が見られます。

予想される一連の SessionView.onTouchEvent 呼び出しに加えて、SessionView.onKeyDown/SessionView.onKeyUp 呼び出しは、スタイラスが画面に触れたり離れたりしたときに受信されます。SessionView.onKeyDown/SessionView.onKeyUp 呼び出しの KeyEvent コードは 112 (KeyEvent.KEYCODE_FORWARD_DEL)、スキャンコードは 555 です。

また、スタイラスのブトゥーンを押したり離したりすると、KeyEvent コード 114 (KeyEvent.KEYCODE_CTRL_RIGHT)、スキャンコード 544 で SessionView.onKeyDown/SessionView.onKeyUp が呼び出されます。

KeyEvent のイベント ソースは 257 (InputDevice.SOURCE_KEYBOARD) として報告されます。これにより、これがキーボード イベントと区別できなくなり、アプリのキーボード機能が台無しになります。これは、スタイラス タッチによって予期しない DEL キーが押されるためです。

誰かがこの振る舞いにもう少し光を当てることができるかどうか疑問に思っています. Android 2.3 にスタイラス機能を実装するのは、Samsung の開発者による独自のハッキングにすぎないのでしょうか? これを処理するための堅牢な方法は何でしょうか?

デバイスの詳細:

Device model: GT-N7000
Firmware version: 2.3.6
Kernel version: 2.6.35.7-N7000XXLA4-CL886827
se.infra@SEP-74 )
#2 SMP PREEMPT Thu Jan 12 21:15:11 KST 2012
Build number: GINGERBREAD.XXLA4
4

1 に答える 1

0

KEYCODE_FORWARD_DEL が API レベル 11 の新しいフィールドであることがわかります。したがって、キー コード 112 は、Samsung によって定義されたコードである必要があります。

次のコードに従って、メソッド onKeyDown() で Java リフレクションを使用します。システムで 112 is KEYCODE_PEN を取得できます。

Field[] fields = event.getClass().getDeclaredFields();
for (Field f : fields) {
    if (f.getType().equals(int.class)) {
        try {
            TLog.i(TAG, f.getName() + ": " + f.getInt(event));
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
于 2012-04-24T05:04:38.707 に答える