(※1)ですが、Android4.4(KitKat)で結構大きな機能追加がありました。追加されたのは、以下の2点です。リーダーモードホストカード・エミュレーションこれはAndroidアプリが、ISO14443-4(ISO-DEP)という規格のNFCカードをエミュレート出来るようになります、という機能です。Beam)の機能をサポートしていましたが、新たにCardEmulationモードが追加されたことになります。リーダーモードこちらは、拡張版リーダーモードとでも言うような機能です。この機能を使うことで、表示しているActivityのNFCをリーダーモードに限定させます。NFCタグを検出すると、NfcAdapter.ReaderCallbackインターフェースで受け取ることが出来ます。この記事では、こちらを掘り下げてみようと思います。最初に僕は、なぜAndroid4.4以前に既にReader/Writerモードがあるのに、新たなリーダーモードの仕組みが提供されたのか、とても不思議に思いました。コールバックでタグのデータを読めるだけかと思ったら、公式サイトで以下のように解説されていました。card).意訳すると、こんな感じでしょうか。この新機能の目的は、例えばモバイル決済などの用途で片方のAndroid端末を支払う側、もう片方のAndroid端末を決済端末として動作させるためです。modeが有効化されたActivityが表示された状態となります。NfcAdapter#enableReaderMode()の説明では、下記のような説明もありました。device.意訳すると、こんな感じでしょうか。有効化されたActivityがフォアグランドにいる間、NFCコントローラをリーダモードに制限します。Beamやカード・エミュレーションモードは無効化されます。確かに今後、Android端末のNFCを使った決済をスムーズに行うには、こういった仕組みが必要そうですね。このNfcAdapter.ReaderCallbackのソースを見てみると、仕組みがさらに良く分かりました。.}最終的にはNFCアダプターのServiceにbindしてました。ActivityとServiceの仲介をするようなNfcActivityManagerというクラスを、新たに生成するみたいです。このNfcActivityManagerクラスで、NFCの各APIを制御してるようです。比較対象として、Android4.3までで主にReader/Writerモードを有効化する方法の1つであるNfcAdapter#enableForegroundDispatch()では、Serviceへのbindしかしてませんでした。Serviceとの間にワンクッション置くようになったんですね。実装の仕方を比較Android4.4以降もNfcAdapter#enableForegroundDispatch()は使えるので、どちらが優れているとかの問題ではないけど、Readerモードを実装する選択肢が増えたということで、実装サンプルを比較してみました。}検出するNFCタグのフィルタリングの記述が、かなりスッキリしたなと思いました。書き方がいろいろあるので一概には言えませんが、少なくともIntentFilterクラスを直接セットするのではなく、フラグ(FLAG_READER_NFC_Aなど)でセットするのは簡潔でいいですよね。まとめ新しいReaderモードの実装については、ユースケースとしてNFCでの決済が挙げられていましたが、それ以外にもReaderモードに固定しておきたいシーンはいろいろとありそうな気がします。いったケースではこの新しいReaderモードの仕組みは、動作の面でもソースコードを見た目の面でも、とても分かり易いなと思いました。NDEF」といったキーワードでググると幸せになれると思います。簡単なNfcAdapter.ReaderCallbackのサンプルを、以下にアップしました。ご興味ありましたら参考にどうぞ。upLoginユーザーは見つかりませんでした。