moto Xの公式NFCアクセサリのSKIP。NFCを使って端末のロックを解除出来るというものですが、それぐらいなら既存の端末でも出来るんじゃないかと思いチャレンジしてみました。が、それなりに大変でした。
まず、標準的なAndroid端末ではスクリーンオフ、スクリーンロック状態ではNFCの読み取りができません。これに対応するためにはシステムアプリNfc.apk(またはNfcNci.apk)を修正する必要があります。
いきなりハードルが高いのですが、修正箇所はこちらのスライドを参照してください。じつは定数を一箇所変更するだけで対応可能です。だがしかし。Androidのソースビルドが何度やってもうまくいかないので自前でビルドするのは諦めました。
XDAで調べるとすでにいくつかの機種用に改変済みのNfc.apkが配布されていました(Nexus 4用はこちら)。「NFC on lockscreen」でXDAを検索すると幾つか見つけることができます。
Nexus 4用とはいっても、CM10.2とAOSP JSS15J向けのものしかなく、手元にあったJWR66V向けはなかったので、本体にCM10.2のNightlyを焼いてしまいました。JSS15J向けのものをJWR66Vに入れたら起動時にNFCのエラーが出て操作が出来なくなったので注意してください。
あとはTaskerとNFCタスクランチャーでNFCタグを読み取った際にロックを解除するようにすればOKですが、これもXDAにスレッドが立っています。しかし、ここで配布されているxmlをどうしてもインポートできず、仕方がないので一から設定しました(インポート不可は環境によって発生するようです。回避策は不明)。
そんな紆余曲折はありつつも、とりあえずそれっぽい動きをするようになりました。PINロックやパターンロックを使っている人なら便利かもしれませんが、ちょっと微妙かな……。ただ、NFCを読み取った時の音を消す方法がわかりません。これを消せれば常用してもいいかなという気はします。
なお。今回使ったNfcNci.apkではスクリーンオフ状態ではNFCを読み取れません。改変方法によってはスクリーンオフでも読み取れるようになるので、やっぱり自分でビルド出来るようにちゃんと環境を整えよう。