iOSでBluetoothキーボードの入力を取得する(ハードウエアキーボードのキー取得)
Posted on 2012年12月20日(木) 15:47
結論からいうと例によって公式な方法は無いようです。
BluetoothキーボードからUITextFieldに文字を入力できますが、直接キー入力を取得するには以下の非公式な方法で可能なようです。
非公開メソッドを使ってしまうので何かとやっかいです。。
まず、UIApplicationに来るイベントを監視します。
UIApplicationのsendEventをオーバーライドするとアプリケーションに色々なイベントが飛んでくるのが見られます。
UIEventの非公開メソッドである_gsEvent:で得られるポインタが指す、正体不明なデータを監視してみると、なんか入ってます。仮に32bit単位読んで先頭を0番目とすると、2番目にキーを押したかどうか、12番目に修飾キーの情報、15番目にキーコードっぽいものが入っているのがわかります。このコードは何なのかは不明な値ですが、とりあえずキーに対応した固有の値が入ります。他にも[17]番目はアスキーコードっぽいのが入るみたいです。
アローキーやファンクションキーなどの特殊キーも取得できます。
シフトキーやコントロールキーが押されたかどうかは12番目の値を見るとビット和で入っています。
詳しくはサンプルプログラムを作りましたので見てみてください。
https://github.com/rhotta/iOS_bluetoothKeyboardInputSample
普段は編集することのないmain関数を編集します。
UIApplicationMainの第3引数に独自クラス名を指定するとUIApplicationをオーバーライドできます。
int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, @"MyUIApplication", NSStringFromClass([AppDelegate class])); } }