関西支部 第二回 NFCLab勉強会 

1,279 views
1,211 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,279
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

関西支部 第二回 NFCLab勉強会 

  1. 1. Now Loading. Please Wait ... Twitter @yokmama AndroidでNFC その1 第2回NFCLab勉強会 関西支部 夜子まま Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  2. 2. 自己紹介 本名  :寺園聖文(てらぞの まさふみ) 別名  :夜子まま 肩書  :株式会社Re:Kayo-System 代表取締役社長 クラスタ:日本Androidの会、関西Unity、NFCLab Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  3. 3. こんにちは、 姉のけいです。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  4. 4. ねぇ、けいー、突然で悪いんだけど、 NFCタグリーダーを作ってみたいんだ ー、だから作り方教えてくれる? たっ!たしかに突然ね! ま、、いいわよ教えてあげるわ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  5. 5. 講義内容 NFCタグ タグディスパッチ フォアグラウンドディスパッチ 次回予告 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  6. 6. ねぇー、ところで、ゆいは、NFC についてどのぐらい知ってるの? えーと、この前もらったカードが NFCカードっていうのらしくて、 それがAndroidから読めるってい うぐらい? Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  7. 7. じゃーまずはNFCタグとは何か? ってところから説明するわね たのむ! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  8. 8. NFCタグ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  9. 9. NFCタグはNFCで規定された 形式のデータを読み書きでき るタグのことです。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  10. 10. NFCタグにはいろんな種 類のタグあります へぇー、色々 あるんやね! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  11. 11. これらのタグにはそれぞれ規格がある のだけど、NFCはそれらのタグを統一 するために作られた新しい規格なの。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  12. 12. ISO/IEC 21481(NFC IP-2) ISO/IEC 18092(NFC IP-1) ISO/IEC JIS ISO/IEC ISO/IEC 14443(Type A) X6319(Type F) 14443(Type B) 15693(Type V) NFCの規格はISO/IEC 18092とISO/IEC 21481 の2つ、このふたつに色 んなタグが含まれる形で 規定されてるの Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  13. 13. 規格 採用例 MIFARE taspoカードのほか、欧州では交通系カード等で広く普及 (ISO/IEC 14443 TYPE-A) ISO/IEC 14443 TYPE-B 住民基本台帳カード、免許証など  Suica、Edy、WAON、nanaco、おサイフケータイな FeliCa ど、国内では交通カードや電子マネーとして広く普及 ISO/IEC 15693 物流、小売などのICタグ、ICラベル NFCの規格に含まれた、各タグは この表に書かれているような所で 使われています。 Re:Kayo-System Co.,Ltd. ※表はTOPPAN FORUMSより http://www.nfc-world.com/about/03.html12年11月23日金曜日
  14. 14. そして、これが実際にAndroidから読み 取ることができるタグの種類 クラス 説明 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 オペレーションへのアクセスを提供する NDEF としてフォーマットされた NFC タグの NDEF データとオペレーションへのア Ndef クセスを提供する NDEF にフォーマットできる可能性があるタグに対するフォーマットのオペレーシ NdefFormatable ョンを提供する Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  15. 15. なので、NFCタグリーダーを作るな らまずはこのタグの取得のところか らはじめないといけないわ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  16. 16. ちょっとまって、、まさかNFC ってひとつだけじゃなくていろん な種類のタグに合わせてプログラ ムしないといけないの? Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  17. 17. えーと、そこは大丈夫! 心配しないで、基本的な部分は同じよ うに処理できるし、あくまでタグの種 類に合わせて処理が出来るようにする ための分類なのよ いいね! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  18. 18. NFCタグへの操作は TagTechnologyが基本に なってるの TagTechnology NfcA NfcF NfcB NfcV IsoDep Ndef MifareClassic MifareUltralight NdefFormatable NfcBarcode Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  19. 19. ただ・・・タグへのアクセスは分かりや すいんだけど、実際にタグを取得す るところがややこしいんだよねぇ そんな驚かさんといてー Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  20. 20. NFCタグ Android Intent Tag TagTechnology Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  21. 21. TagTechnologyの取得例 Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); if (Arrays.asList(tag.getTechList()).contains(NfcA.class.getName())){ NfcA nfca = NfcA.get(tag); } 取得したタグにはそれがサポート しているタグの種類が入っている ので、それからどの TagTechnologyが取得できるか調 べることができるの Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  22. 22. なるほど!じゃ、早速タグを取得 するプログラムを作ってみる! がんばって! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  23. 23. けいーー、早速タグを取得、、 ておもったけど、どうやったら Intentを受け取れるの? ごめん! 大事なこといい忘れた Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  24. 24. タグディスパッチ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  25. 25. Androidでタグの入ったIntentを受け 取るにはタグディスパッチシステムと いう仕組みを使ってどんなタグを受信 するのか設定する必要があります。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  26. 26. それでは、Intentフィルターを使った受 信設定の方法を説明しますね。 Intentフィルターには次の3つのフィル ターがあります。 ACTION_TAG_DISCOVERED ACTION_NDEF_DISCOVERED ACTION_TECH_DISCOVERED Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  27. 27. ACTION_TAG_DISCOVERED 使用用途の応じてこれら NFCタグ全般に対するIntentフィルター のActionを ACTION_NDEF_DISCOVERED AndroidManifest.xmlに NFCのデータが書かれているタグへの 書いてあげればいいの Intentフィルター ACTION_TECH_DISCOVERED NFCのタグの種類にに対する Intentフィルター Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  28. 28. それじゃ、とりあえずTAGを読みたい! て時は、ACTION_TAG_DISCOVEREDを使 えばよさそうだね! さっそくやってみる! そ、そうかな・・ まぁやってみて! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  29. 29. けいーー!早速作ってみたけど、 全然!だめ! タグに反応しないんですけどぉー フフフ、 早速、罠に嵌ったようね。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  30. 30. 実は、NFCの読み取りはより正確 にフィルターを宣言されたアプリを 優先する仕様になっているの。 だから、反応しないのは他のアプリ がより詳細に書かれているので横取 りされてることになるのよ もぉー、そういうこと 先に言ってよー Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  31. 31. 優先順位 ACTION_NDEF_DISCOVERED ACTION_TECH_DISCOVERED ACTION_TAG_DISCOVERED このように基本的には上か ら順にチェックしていって反 応するんです Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  32. 32. フォーマット済 NDEF_DISCOVERDがActivity NDEF_DISCOVERD みタグ にハンドルされている? 未フォーマット TECH_DISCOVERDがActivity TECH_DISCOVERD タグ にハンドルされている? TAG_DISCOVERDがActivityに TAG_DISCOVERD ハンドルされている? このフロー図はActivityにIntent IntentをActivityに渡す を渡すまでのフロー図よ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  33. 33. なるほどー、 じゃACTION_TAG_DISCOVEREDだと、標準で はいっているタグリーダーが起動するのはそうい う理由だったんだねー。 てことは・・このActionは何のためにあるの? さぁーー、それが謎というかなんという か、実質使い物になるようにするにはカー ドの種類をいれるか、タグのデータの種類 をいれるかしないと反応しないですし。 それがAndroidらしいということなのかな。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  34. 34. TECH_DISCOVERDと NDEF_DISCOVERD はより詳細にタグを指定するためにオプショ ンがあるのでそれを説明するわね おっけー! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  35. 35. データのMIMEタイプをtext/plainにした例 <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain" /> </intent-filter> まずは、NDEF_DISCOVERDのオプションに ついて。このフィルターはNFCのデータの中身 についてのフィルターをつけるため、dataタ グを使います Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  36. 36. AndroidManifest.xml <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 <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タグの種類でフ ィルタリングするため、別ファイルでタグの種 類を列挙します。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  37. 37. ANDの例 NfcBでかつNdefのタグ <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> ここにはAndroidの実際 のクラス名を書く ORの例 NfcBまたはNfcAのタグ <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と ANDの書き方があるので注意してくださいね Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  38. 38. よーし!今度こそ作れる? できるわよ、やってみて! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  39. 39. ねぇ、けい とりあえずタグリーダぽいのできたんだけど読 み取る時に、毎回選択画面がでてきてすっごい 使い勝手悪いんだけど、これもしかして対応ア プリたくさんいれるとどんどん増えるの? それは、フォアグラウンドディ スパッチを使ってないからね Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  40. 40. 毎回これがでるんじゃ 問題の画面 だめよねぇ サンプル・コード https://github.com/yokmama/ykmjuku-samples/tree/master/NFCSample01 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  41. 41. フォアグラウンド ディスパッチ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  42. 42. フォアグラウンドディスパッチは、Activityがフォア グラウンドにある場合において、他のアプリよりも優 先順位が高い設定を行うことができる仕組みで、これ により選択画面なしでタグを受信できます。 まさに、それ! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  43. 43. NfcAdapter public void enableForegroundDispatch (Activity activity, PendingIntent intent, IntentFilter[] filters, String[][]techLists) public void disableForegroundDispatch (Activity activity) フォアグラウンドディスパッチの使い方は 簡単で有効にするときはNfcAdapterの enableForegroundDispachを呼び出し て、無効にするときは、 disableForegroundDispatchを呼び出すだ けでいいの Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  44. 44. 使用例) public void onResume() { super.onResume(); mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray); } public void onPause() { super.onPause(); mAdapter.disableForegroundDispatch(this); } だけど、これを使う場合は Activityがフォアグラウンドでない といけないという制約があるので、 onResumeで有効にしてonPause で無効にするのが一般的です。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  45. 45. ACION_NDEF_DISCOVEREDの定義 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 }; ACION_TECH_DISCOVEREDの定義 techListsArray = new String[][] { new String[] { NfcA.class.getName(), Ndef.class.getName() }, new String[] { NfcF.class.getName() } }; 引数のフィルターはタグディスパッ チと考え方は同じなので、書き方が 違うと考えてみるといいです。 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  46. 46. 使用例 public void onNewIntent(Intent intent) { Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); } あと、フォアグラウンドディスパッ チはずっと画面が表示されている状 態での受信なのでIntentは onResumeで受け取るのではなく onNewIntentでうけとるといいわよ Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  47. 47. これで、NFCの受信からタグの取得 までの説明は終わったわ。 あとは作るだけ! 頑張って! うん! やってみる! Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  48. 48. タグディスパッチのサンプル https://github.com/yokmama/ykmjuku-samples/ tree/master/NFCSample01 フォアグラウンドディスパッチのサンプル https://github.com/yokmama/ykmjuku-samples/ tree/master/NFCSample02 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  49. 49. 次回予告 Re:Kayo-System Co.,Ltd.12年11月23日金曜日
  50. 50. 次回は、NDEFの解説と、ハンズオン形式 でNFC勤怠管理システムの作り方を解説し たいと思っています。 時期:2013年1月中旬頃 場所:多分ECC 情報:NFCLabメーリングリスト このサイトで登録できます http://lab-nfc.com/ Re:Kayo-System Co.,Ltd.12年11月23日金曜日

×