前の記事でリモコンを自作したのですが、2通りの操作しかできない(シングルクリックとダブルクリックのみ。長押しは音声検索に奪われてユーザには使えない)ので、結局センチュリー Bluetooth接続マルチメディアリモコン iRemote Shutterを買ってしまいました。これはiPhone用ですが、Bluetoothキーボードとして認識されるらしいので、Androidでも使えることを期待して購入しました。

実際に使ってみると、接続はスムーズにでき、再生・曲送り・ボリューム調整は問題なく動きました。ただし、接続中はソフトウェアキーボードが消えてしまうので、日本語入力はできません。ソフトウェアキーボードを出すボタンがついているのですが、Androidでは動作しませんでした(どうせ運転中にしか使わないので影響はありませんが)。

車の運転中はボリューム調整がいらない(カーオーディオに接続しているのでそちらで調整できる)代わりに、早送り&巻き戻しが欲しかったので、キーボードのレイアウトを調整することにしました。幸いにもAndroid4.1からはユーザー定義のキーボードレイアウトをインストールできるので、さくっと自作。これでだいぶ操作しやすくなった気がします。

キーボードレイアウトのソースはgithubにあげました。


参考資料は以下の通りです。

Android入力デバイスの公式資料(ただし、カスタマイズ用ではなくデバイスメーカー向け)
Android入力デバイスの仕組みがわかりやすく解説されているマイナビの記事
カスタマイズキーボードを公開している方々
キーイベントの一覧



このカスタムキーボードの技術的に興味深い点としては、https://github.com/fchiba/iremoteshutter/blob/master/res/raw/iremoteshutter2.kcm#L4 のように、
map key (linuxのキーコード) (Androidのキーコード)
とかけば、kcm(=Key Character Map)という本来は文字の変換しか出来ないファイルにも関わらずキー自体の配置を変えられてしまうところです。これはy10gさんのソースを見ていて発見したんですが、undocumentedな仕様ですかね…