忍者ブログ

アンドロイドのあれこれ

NFCはじめてみます
最近はAndroidのNFC(Near Field Communication)を使用するアプリを作成してみました。
案の定、小さなつまらないトラブルで長時間はまってました。

まずはNFCのタグを受け取れるようにするにはAndroidManifest.xmlにNFCのfiltering intentを設定します。 以下のサンプルをそのまま書いてみました。
http://developer.android.com/intl/ja/guide/topics/nfc/nfc.html

必要なパーミッションを追加
<uses-permission android:name="android.permission.NFC" />
AndroidマーケットでNFC対応端末のみ見えるようにしたければ以下を追加
<uses-feature android:name="android.hardware.nfc" android:required="true" />

NFCタグの基本な動作システムはACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED、ACTION_TAG_DISCOVERED
NFC tag dispatch

Activityにintent-filterの追加(ACTION_TECH_DISCOVEREDの例)
ACTION_TECH_DISCOVEREDではサポートされているタグを好きなように対応するリスト作成できる。
<activity>
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
    </intent-filter>

    <meta-data android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/nfc_tech_filter" />
</activity>
<!-- res/xml/nfc_tech_filter.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.NfcB</tech>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.NfcV</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>
何も考えずにサイトのドキュメント通り、マニフェストに追加してみましたが、NFCかざしてみても自分のアプリには反応がなくて。。。。
ガッツり調べてみたり、ApiDemoのサンプルコードを読んだりしてnfc_tech_filter.xmlの中身を変えてみました。
<!-- res/xml/nfc_tech_filter.xml -->
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <!-- capture anything using NfcF -->
    <tech-list>
        <tech>android.nfc.tech.NfcF</tech>
    </tech-list>

    <!-- capture all MIFARE Classics with NDEF payloads -->
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.MifareClassic</tech>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
</resources>
そうするとちゃんと自分のアプリがNFCタグに反応がありました。もちろんNFCタグのタイプによりますが、ACTION_TECH_DISCOVEREDの場合はただ<tech-list> の中に全部定義しておけばいいというわけではなく、対応している必要なものだけでいいということがわかりました。
こちらのサイトで参考しました。NexusSによるNFC調査: getTechList 編

NFC使用するアプリ開発をはじめたばっかりですが、対応端末が増えて普及になればもっともっと面白いものができそうで楽しみです。

COMMENT
NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
PR
© Android Advent
powered by 忍者ツールズ / 忍者ブログ / [PR]