Android NFCのtech list
AndroidでNFCで起動するアプリを作っていたのですが、別のフェリカで起動されるアプリを入れたところ、リストに出なくなりました.いままでandroid.nfc.action.TECH_DISCOVEREDに反応するのがなかったので、android.nfc.action.TAG_DISCOVERED扱いで起動されていたということだろうと、フェリカのandroid.nfc.action.TECH_DISCOVEREDに反応させようとして少しはまりました.
NFC Basics
http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
によるとマニフェストにTECH_DISCOVERDに対するインテントフィルターを作成し、メタ情報でtechの種類を定義したXMLファイルを指定する必要があります.そのtechの種類の定義ですが、同じページにこんな例が載っています。
android.nfc.tech.IsoDep android.nfc.tech.NfcA android.nfc.tech.NfcB android.nfc.tech.NfcF android.nfc.tech.NfcV android.nfc.tech.Ndef android.nfc.tech.NdefFormatable android.nfc.tech.MifareClassic android.nfc.tech.MifareUltralight
とあったので、これですべてのパターンに反応するか思って実行してのですが、リストに出てきません.実は
android.nfc.tech.NfcF
としなければでした。
よく読んでみると、複数のtech-listが定義でき、そのいずれかがカードから得られたgetTechListのサブセットになっていた場合、反応するらしいです.
You can also specify multiple tech-list sets. Each of the tech-list sets is considered independently, and your activity is considered a match if any single tech-list set is a subset of the technologies that are returned by getTechList().
ということでNFC Basicsに書いてあるリストは絶対に反応しないものです。読まないのが悪いのですが、紛らわしい。こういう書き方がAndroidっぽいなと思うのは私だけ?
TECH_DISCOVERDに反応があるものを新たにインストールした場合、TAG_DISCOVERDでリストに出ていたものが出なくなるというのは他人のアプリにはめられそうな予感のする仕様ですね。