関西支部 第二回 NFCLab勉強会 

50
Re:Kayo-System Co.,Ltd. Twitter @yokmama Now Loading. Please Wait ... AndroidでNFC その1 第2回NFCLab勉強会 関西支部 夜子まま 121123日金曜日

description

 

Transcript of 関西支部 第二回 NFCLab勉強会 

Page 1: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

Twitter @yokmamaNow Loading. Please Wait ...

AndroidでNFC その1第2回NFCLab勉強会 関西支部夜子まま

12年11月23日金曜日

Page 2: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

自己紹介

本名  :寺園聖文(てらぞの まさふみ)

別名  :夜子まま

肩書  :株式会社Re:Kayo-System 代表取締役社長

クラスタ:日本Androidの会、関西Unity、NFCLab

12年11月23日金曜日

Page 3: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

こんにちは、姉のけいです。

12年11月23日金曜日

Page 4: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ねぇ、けいー、突然で悪いんだけど、NFCタグリーダーを作ってみたいんだー、だから作り方教えてくれる?

たっ!たしかに突然ね!ま、、いいわよ教えてあげるわ

12年11月23日金曜日

Page 5: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

講義内容

NFCタグ

タグディスパッチ

フォアグラウンドディスパッチ

次回予告

12年11月23日金曜日

Page 6: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ねぇー、ところで、ゆいは、NFCについてどのぐらい知ってるの?

えーと、この前もらったカードがNFCカードっていうのらしくて、それがAndroidから読めるってい

うぐらい?

12年11月23日金曜日

Page 7: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

じゃーまずはNFCタグとは何か?ってところから説明するわね

たのむ!

12年11月23日金曜日

Page 8: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

NFCタグ

12年11月23日金曜日

Page 9: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

NFCタグはNFCで規定された形式のデータを読み書きでき

るタグのことです。

12年11月23日金曜日

Page 10: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

NFCタグにはいろんな種類のタグあります

へぇー、色々あるんやね!

12年11月23日金曜日

Page 11: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

これらのタグにはそれぞれ規格があるのだけど、NFCはそれらのタグを統一するために作られた新しい規格なの。

12年11月23日金曜日

Page 12: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ISO/IEC 21481(NFC IP-2)

ISO/IEC 18092(NFC IP-1)

ISO/IEC 14443(Type B)

ISO/IEC 15693(Type V)

ISO/IEC 14443(Type A)

JIS X6319(Type F)

NFCの規格はISO/IEC 18092とISO/IEC 21481の2つ、このふたつに色んなタグが含まれる形で

規定されてるの

12年11月23日金曜日

Page 13: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

規格 採用例

MIFARE(ISO/IEC 14443 TYPE-A)

taspoカードのほか、欧州では交通系カード等で広く普及

ISO/IEC 14443 TYPE-B 住民基本台帳カード、免許証など

FeliCa  Suica、Edy、WAON、nanaco、おサイフケータイなど、国内では交通カードや電子マネーとして広く普及

ISO/IEC 15693 物流、小売などのICタグ、ICラベル

http://www.nfc-world.com/about/03.html※表はTOPPAN FORUMSより

NFCの規格に含まれた、各タグはこの表に書かれているような所で

使われています。

12年11月23日金曜日

Page 14: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

クラス 説明

TagTechnology すべてのタグテクノロジークラスで実装する必要があるインターフェイス

NfcA NFC-A ( ISO 14443-3A ) プロパティと I/O オペレーションへのアクセスを提供する

NfcB NFC-B ( ISO 14443-3B ) プロパティと I/O オペレーションへのアクセスを提供する

NfcF NFC-F ( JIS 6319-4 ) プロパティと I/O オペレーションへのアクセスを提供する

NfcV NFC-V ( ISO 15693 ) プロパティと I/O オペレーションへのアクセスを提供する

IsoDep ISO-DEP ( ISO 14443-4 ) プロパティと I/O オペレーションへのアクセスを提供する

NdefNDEF としてフォーマットされた NFC タグの NDEF データとオペレーションへのアクセスを提供する

NdefFormatableNDEF にフォーマットできる可能性があるタグに対するフォーマットのオペレーションを提供する

そして、これが実際にAndroidから読み取ることができるタグの種類

12年11月23日金曜日

Page 15: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

なので、NFCタグリーダーを作るならまずはこのタグの取得のところからはじめないといけないわ

12年11月23日金曜日

Page 16: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ちょっとまって、、まさかNFCってひとつだけじゃなくていろんな種類のタグに合わせてプログラムしないといけないの?

12年11月23日金曜日

Page 17: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

えーと、そこは大丈夫!心配しないで、基本的な部分は同じように処理できるし、あくまでタグの種類に合わせて処理が出来るようにする

ための分類なのよ

いいね!

12年11月23日金曜日

Page 18: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

TagTechnology

NfcA NfcF NfcB NfcV IsoDep

Ndef MifareClassic MifareUltralight NdefFormatable

NfcBarcode

NFCタグへの操作はTagTechnologyが基本に

なってるの

12年11月23日金曜日

Page 19: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ただ・・・タグへのアクセスは分かりやすいんだけど、実際にタグを取得するところがややこしいんだよねぇ

そんな驚かさんといてー

12年11月23日金曜日

Page 20: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

NFCタグ Android Intent

Tag

TagTechnology

12年11月23日金曜日

Page 21: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);if (Arrays.asList(tag.getTechList()).contains(NfcA.class.getName())){ NfcA nfca = NfcA.get(tag);}

TagTechnologyの取得例

取得したタグにはそれがサポートしているタグの種類が入っている

ので、それからどのTagTechnologyが取得できるか調

べることができるの

12年11月23日金曜日

Page 22: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

なるほど!じゃ、早速タグを取得するプログラムを作ってみる!

がんばって!

12年11月23日金曜日

Page 23: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

けいーー、早速タグを取得、、ておもったけど、どうやったらIntentを受け取れるの?

ごめん!大事なこといい忘れた

12年11月23日金曜日

Page 24: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

タグディスパッチ

12年11月23日金曜日

Page 25: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

Androidでタグの入ったIntentを受け取るにはタグディスパッチシステムという仕組みを使ってどんなタグを受信するのか設定する必要があります。

12年11月23日金曜日

Page 26: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

それでは、Intentフィルターを使った受信設定の方法を説明しますね。

Intentフィルターには次の3つのフィルターがあります。

ACTION_TAG_DISCOVERED

ACTION_TECH_DISCOVERED

ACTION_NDEF_DISCOVERED

12年11月23日金曜日

Page 27: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ACTION_TAG_DISCOVERED

ACTION_TECH_DISCOVERED

ACTION_NDEF_DISCOVERED

NFCタグ全般に対するIntentフィルター

NFCのデータが書かれているタグへのIntentフィルター

NFCのタグの種類にに対するIntentフィルター

使用用途の応じてこれらのActionを

AndroidManifest.xmlに書いてあげればいいの

12年11月23日金曜日

Page 28: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

それじゃ、とりあえずTAGを読みたい!て時は、ACTION_TAG_DISCOVEREDを使

えばよさそうだね!さっそくやってみる!

そ、そうかな・・まぁやってみて!

12年11月23日金曜日

Page 29: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

けいーー!早速作ってみたけど、全然!だめ!

タグに反応しないんですけどぉー

フフフ、早速、罠に嵌ったようね。

12年11月23日金曜日

Page 30: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

実は、NFCの読み取りはより正確にフィルターを宣言されたアプリを優先する仕様になっているの。

だから、反応しないのは他のアプリがより詳細に書かれているので横取りされてることになるのよ

もぉー、そういうこと先に言ってよー

12年11月23日金曜日

Page 31: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ACTION_TAG_DISCOVERED

ACTION_TECH_DISCOVERED

ACTION_NDEF_DISCOVERED優先順位

このように基本的には上から順にチェックしていって反

応するんです

12年11月23日金曜日

Page 32: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

フォーマット済みタグ

未フォーマットタグ

NDEF_DISCOVERD

TECH_DISCOVERD

TAG_DISCOVERD

NDEF_DISCOVERDがActivityにハンドルされている?

IntentをActivityに渡す

TECH_DISCOVERDがActivityにハンドルされている?

TAG_DISCOVERDがActivityにハンドルされている?

このフロー図はActivityにIntentを渡すまでのフロー図よ

12年11月23日金曜日

Page 33: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

なるほどー、じゃACTION_TAG_DISCOVEREDだと、標準ではいっているタグリーダーが起動するのはそうい

う理由だったんだねー。てことは・・このActionは何のためにあるの?

さぁーー、それが謎というかなんというか、実質使い物になるようにするにはカードの種類をいれるか、タグのデータの種類をいれるかしないと反応しないですし。それがAndroidらしいということなのかな。

12年11月23日金曜日

Page 34: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

TECH_DISCOVERDと NDEF_DISCOVERDはより詳細にタグを指定するためにオプショ

ンがあるのでそれを説明するわね

おっけー!

12年11月23日金曜日

Page 35: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" /></intent-filter>

データのMIMEタイプをtext/plainにした例

まずは、NDEF_DISCOVERDのオプションについて。このフィルターはNFCのデータの中身についてのフィルターをつけるため、dataタ

グを使います

12年11月23日金曜日

Page 36: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list></resources>

つぎに、TECH_DISCOVERDのオプションについて。このフィルターはNFCタグの種類でフィルタリングするため、別ファイルでタグの種

類を列挙します。

<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" />

xml/nfc_tech_filter.xml

AndroidManifest.xml

12年11月23日金曜日

Page 37: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

タグの種類を列挙する定義ファイルは、ORとANDの書き方があるので注意してくださいね

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list></resources>

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcB</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcA</tech> </tech-list></resources>

ORの例 NfcBまたはNfcAのタグ

ANDの例 NfcBでかつNdefのタグ

ここにはAndroidの実際のクラス名を書く

12年11月23日金曜日

Page 38: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

よーし!今度こそ作れる?

できるわよ、やってみて!

12年11月23日金曜日

Page 39: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

ねぇ、けいとりあえずタグリーダぽいのできたんだけど読み取る時に、毎回選択画面がでてきてすっごい使い勝手悪いんだけど、これもしかして対応アプリたくさんいれるとどんどん増えるの?

それは、フォアグラウンドディスパッチを使ってないからね

12年11月23日金曜日

Page 40: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

問題の画面

https://github.com/yokmama/ykmjuku-samples/tree/master/NFCSample01

毎回これがでるんじゃだめよねぇ

サンプル・コード

12年11月23日金曜日

Page 41: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

フォアグラウンドディスパッチ

12年11月23日金曜日

Page 42: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

フォアグラウンドディスパッチは、Activityがフォアグラウンドにある場合において、他のアプリよりも優先順位が高い設定を行うことができる仕組みで、これ

により選択画面なしでタグを受信できます。

まさに、それ!

12年11月23日金曜日

Page 43: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

フォアグラウンドディスパッチの使い方は簡単で有効にするときはNfcAdapterのenableForegroundDispachを呼び出し

て、無効にするときは、disableForegroundDispatchを呼び出すだ

けでいいの

public void enableForegroundDispatch (Activity activity, PendingIntent intent, IntentFilter[] filters, String[][]techLists)

public void disableForegroundDispatch (Activity activity)

NfcAdapter

12年11月23日金曜日

Page 44: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);}

public void onPause() { super.onPause(); mAdapter.disableForegroundDispatch(this);}

だけど、これを使う場合はActivityがフォアグラウンドでないといけないという制約があるので、onResumeで有効にしてonPauseで無効にするのが一般的です。

使用例)

12年11月23日金曜日

Page 45: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

引数のフィルターはタグディスパッチと考え方は同じなので、書き方が違うと考えてみるといいです。

IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);try { ndef.addDataType("text/plain");}catch (MalformedMimeTypeException e) { throw new RuntimeException("失敗", e);}IntentFilter[] intentFiltersArray = new IntentFilter[] { ndef };

techListsArray = new String[][] { new String[] { NfcA.class.getName(), Ndef.class.getName() }, new String[] { NfcF.class.getName() }};

ACION_TECH_DISCOVEREDの定義

ACION_NDEF_DISCOVEREDの定義

12年11月23日金曜日

Page 46: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

あと、フォアグラウンドディスパッチはずっと画面が表示されている状

態での受信なのでIntentはonResumeで受け取るのではなくonNewIntentでうけとるといいわよ

public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);}

使用例

12年11月23日金曜日

Page 47: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

これで、NFCの受信からタグの取得までの説明は終わったわ。

あとは作るだけ!頑張って!

うん!やってみる!

12年11月23日金曜日

Page 49: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

次回予告

12年11月23日金曜日

Page 50: 関西支部 第二回 NFCLab勉強会 

Re:Kayo-System Co.,Ltd.

次回は、NDEFの解説と、ハンズオン形式でNFC勤怠管理システムの作り方を解説し

たいと思っています。

時期:2013年1月中旬頃場所:多分ECC情報:NFCLabメーリングリスト

http://lab-nfc.com/このサイトで登録できます

12年11月23日金曜日