スポンサードリンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサードリンク



スポンサードリンク

NFCカード(フェリカとかも)を読んでID取得(Activity起動)

NFCカード(フェリカとかも)を読んでID取得(Activity起動)

Intentの判断には今回ACTION_TECH_DISCOVEREDを使いましたが、以下のように種類があり優先度が違います。
ACTION_NDEF_DISCOVERED
ACTION_TECH_DISCOVERED
ACTION_TAG_DISCOVERED

しかし私がテストしたnexus10では何故かACTION_TAG_DISCOVEREDは反応しなかった。
なぜ? 気にしないでおきます(^^;)


1、カードに起動させられるActivityを作成する。(例:NfcActivity)

・ActivityにTextViewを作成して、idはtext_tagidとする。
・onCreateメソッドに以下のロジックを追加してIDを取得


TextView text = (TextView)findViewById(R.id.text_tagid);

// インテントを取得
Intent intent = getIntent();

// カード発見
String action = intent.getAction();

if (NfcAdapter.ACTION_TECH_DISCOVERED.equals(action)) { 
// ID情報を取得する。
    byte[] ids = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
    StringBuilder tagId = new StringBuilder("ID(" + ids.length + "bytes) : ");
    for (int i=0; i        tagId.append(String.format("%02x", ids[i] & 0xff));
    }
    text.setText(text_tagid.toString());
}


2、res/xmlフォルダを作成して、filter_nfctype.xmlを作成する。

対象となるカードを以下のようにセットする。
逆にいえば、反応させたく無いカードは記述しない。

自分のカードがどの種類かは、実行した時のlogを見るとdispacherに表示されてるのでわかります。
例えば、以下のような感じ。 正確に組み合わせを書けば起動時の優先順位が上がります。
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech>
        <tech>android.nfc.tech.MifareUltralight</tech> 
        <tech>android.nfc.tech.NdefFormatable</tech> 
    </tech-list>
<tech-list>
        <tech>android.nfc.tech.NfcF</tech>
        <tech>android.nfc.tech.Ndef</tech> 
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcF</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.IsoDep</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcA</tech> 
    </tech-list>
    <tech-list>       
        <tech>android.nfc.tech.NfcB</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NfcV</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.Ndef</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.NdefFormatable</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.MifareClassic</tech>
    </tech-list>
    <tech-list>
        <tech>android.nfc.tech.MifareUltralight</tech>
    </tech-list>
</resources>


3、AndoroidManifest.xmlの編集

簡単に解説すると
TECH_DISCOVEREDのIntentがコールされた場合、に該当のActivityが起動します。
そして対象カードはmeta-dataに書かれてるxmlファイルを参照する。
<activity
    android:name=".NfcActivity"
    android:label="@string/title_activity_NfcActivity"
    android:launchMode="singleInstance" >
    <intent-filter>
        <action android:name="android.nfc.action.TECH_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <meta-data
        android:name="android.nfc.action.TECH_DISCOVERED"
        android:resource="@xml/filter_nfctype" ></meta-data>
</activity>
スポンサードリンク


テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

メールフォーム

ShoEngineer

Author:ShoEngineer

人気ブログランキングへ
↑↑クリックお願いします!

相互リンク歓迎(^_^)
以下からご連絡を!

名前:
メール:
本文:

スポンサード リンク
楽天
検索フォーム
Lc.ツリーカテゴリー
リンク
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。