Android入門 タグに反応するようにする


インテントフィルター

AndroidがNFCタグを見つけると nfcに関するインテントフィルターをつけているアプリ一覧を出して「どれを起動しますか?」と聞いてきます
いきなりNFCタグを見つけた瞬間に自分のアプリが起動することはありません。(特殊な設定をタグにすれば別ですが)
ということでインテントフィルターの設定をして一覧に載りましょう。

Androidのマニフェストファイルを開いて

		
<uses-permission android:name="android.permission.NFC" />
   を追加。そしてMainActivityの方に

<intent-filter>

<action android:name="android.nfc.action.TECH_DISCOVERED"/>

<action android:name="android.nfc.action.TAG_DISCOVERED"/>

<category android:name="android.intent.category.DEFAULT"/>

</intent-filter>


<meta-data android:name="android.nfc.action.TECH_DISCOVERED"

android:resource="@xml/nfc_tech_filter" />
   これを追加します。そしてResourceフォルダにxmlフォルダを作って新規ファイルでnfc_tech_filter.xmlファイルを作り以下を書きましょう

<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っていうのが表示されますね〜。そしてそれを押したらアプリが起動します。
まだ読み書きはしてませんが、とりあえずタグを見つけた時にアプリが起動できるようになりました。


 

ホームへ