Android入門 タグに反応するようにする
インテントフィルター
AndroidがNFCタグを見つけると nfcに関するインテントフィルターをつけているアプリ一覧を出して「どれを起動しますか?」と聞いてきます
いきなりNFCタグを見つけた瞬間に自分のアプリが起動することはありません。(特殊な設定をタグにすれば別ですが)
ということでインテントフィルターの設定をして一覧に載りましょう。
Androidのマニフェストファイルを開いて
|
<intent-filter> |
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources> |
めんどくさい人はGit-Hubからzipでプロジェクトごと落とせます ここから
ちなみにここまでのことはGoogleのページにもあります
http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
何をしているのかというと。タグが見つかった時に飛ばされるインテントを受け取れるよっていう宣言ですね。
タグが見つかると 3種類のインテントがAndroidから飛ばされます。以下の画像参照
Androidはまず、NDEFというフォーマットでNFCタグにデータが書いてあった場合 NDEF_DISCOVERDを飛ばします。
もし、そのインテントフィルターを持ってるActivityがなかったらTECH_DISCOVERDが飛ばされます。
若しくはNDEFじゃない普通にタグが見つかった時もそうです。そしてこれもだめならTAG_DISCOVREDです。
今回は別にNDEFで書いてあるタグを読もうとしてないで、TECHとTAGのインテントフィルターを設置しました。
そしてTECHには更に細かくどういうNFCをタグに反応するかを記載できます。今回使おうとしているMifareClassicや
SuicaのようなNfcFにも反応するようにしてみました。それを書いたのがnfc_tech_filter.xmlです。
この状態でActivityとか何もかかずアプリを起動しましょう
こんな風になるはず。
そして、NFCタグ(Suicaでもいいですよ)をAndroidにかざしましょう。
ね?今回作ったnfcっていうのが表示されますね〜。そしてそれを押したらアプリが起動します。
まだ読み書きはしてませんが、とりあえずタグを見つけた時にアプリが起動できるようになりました。