Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Now Loading. Please Wait ...                      Twitter @yokmama AndroidでNFC その1 第2回NFCLab勉強会 関西支部 夜子まま                 ...
自己紹介               本名  :寺園聖文(てらぞの まさふみ)               別名  :夜子まま               肩書  :株式会社Re:Kayo-System 代表取締役社長             ...
こんにちは、               姉のけいです。                         Re:Kayo-System Co.,Ltd.12年11月23日金曜日
ねぇ、けいー、突然で悪いんだけど、               NFCタグリーダーを作ってみたいんだ                 ー、だから作り方教えてくれる?           たっ!たしかに突然ね!          ま、、いいわよ教...
講義内容               NFCタグ               タグディスパッチ               フォアグラウンドディスパッチ               次回予告                           ...
ねぇー、ところで、ゆいは、NFC               についてどのぐらい知ってるの?                えーと、この前もらったカードが                NFCカードっていうのらしくて、             ...
じゃーまずはNFCタグとは何か?           ってところから説明するわね                たのむ!                             Re:Kayo-System Co.,Ltd.12年11月23日金曜日
NFCタグ                       Re:Kayo-System Co.,Ltd.12年11月23日金曜日
NFCタグはNFCで規定された               形式のデータを読み書きでき                  るタグのことです。                             Re:Kayo-System Co.,Ltd....
NFCタグにはいろんな種                 類のタグあります               へぇー、色々               あるんやね!                              Re:Kayo-Syste...
これらのタグにはそれぞれ規格がある     のだけど、NFCはそれらのタグを統一     するために作られた新しい規格なの。                      Re:Kayo-System Co.,Ltd.12年11月23日金曜日
ISO/IEC 21481(NFC IP-2)        ISO/IEC 18092(NFC IP-1)           ISO/IEC          JIS            ISO/IEC         ISO/IEC  ...
規格                               採用例           MIFARE                            taspoカードのほか、欧州では交通系カード等で広く普及   (ISO/IEC 1...
そして、これが実際にAndroidから読み         取ることができるタグの種類               クラス                                説明        TagTechnology    すべ...
なので、NFCタグリーダーを作るな   らまずはこのタグの取得のところか     らはじめないといけないわ                       Re:Kayo-System Co.,Ltd.12年11月23日金曜日
ちょっとまって、、まさかNFC               ってひとつだけじゃなくていろん               な種類のタグに合わせてプログラ                 ムしないといけないの?                   ...
えーと、そこは大丈夫!        心配しないで、基本的な部分は同じよ        うに処理できるし、あくまでタグの種        類に合わせて処理が出来るようにする             ための分類なのよ               ...
NFCタグへの操作は                        TagTechnologyが基本に                              なってるの                                 Tag...
ただ・・・タグへのアクセスは分かりや    すいんだけど、実際にタグを取得す     るところがややこしいんだよねぇ               そんな驚かさんといてー                             Re:Kayo-S...
NFCタグ    Android      Intent                             Tag                         TagTechnology                        ...
TagTechnologyの取得例    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);    if (Arrays.asList(tag.getTechList()).co...
なるほど!じゃ、早速タグを取得                するプログラムを作ってみる!                   がんばって!                            Re:Kayo-System Co.,Ltd.1...
けいーー、早速タグを取得、、               ておもったけど、どうやったら                 Intentを受け取れるの?                   ごめん!                大事なこといい忘れ...
タグディスパッチ                     Re:Kayo-System Co.,Ltd.12年11月23日金曜日
Androidでタグの入ったIntentを受け    取るにはタグディスパッチシステムと    いう仕組みを使ってどんなタグを受信     するのか設定する必要があります。                              Re:Kay...
それでは、Intentフィルターを使った受       信設定の方法を説明しますね。   Intentフィルターには次の3つのフィル           ターがあります。      ACTION_TAG_DISCOVERED      ACTI...
ACTION_TAG_DISCOVERED                            使用用途の応じてこれら   NFCタグ全般に対するIntentフィルター                                 のAct...
それじゃ、とりあえずTAGを読みたい!               て時は、ACTION_TAG_DISCOVEREDを使                     えばよさそうだね!                    さっそくやってみる! ...
けいーー!早速作ってみたけど、                   全然!だめ!               タグに反応しないんですけどぉー                   フフフ、               早速、罠に嵌ったようね。  ...
実は、NFCの読み取りはより正確               にフィルターを宣言されたアプリを                優先する仕様になっているの。               だから、反応しないのは他のアプリ              ...
優先順位               ACTION_NDEF_DISCOVERED               ACTION_TECH_DISCOVERED               ACTION_TAG_DISCOVERED        ...
フォーマット済                           NDEF_DISCOVERDがActivity                    NDEF_DISCOVERD     みタグ                       ...
なるほどー、               じゃACTION_TAG_DISCOVEREDだと、標準で               はいっているタグリーダーが起動するのはそうい                      う理由だったんだねー。  ...
TECH_DISCOVERDと NDEF_DISCOVERD     はより詳細にタグを指定するためにオプショ         ンがあるのでそれを説明するわね               おっけー!                       ...
データのMIMEタイプをtext/plainにした例   <intent-filter>       <action android:name="android.nfc.action.NDEF_DISCOVERED"/>       <cate...
AndroidManifest.xml   <intent-filter>       <action android:name="android.nfc.action.TECH_DISCOVERED"/>   </intent-filter>...
ANDの例 NfcBでかつNdefのタグ    <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">        <tech-list>            <tec...
よーし!今度こそ作れる?               できるわよ、やってみて!                              Re:Kayo-System Co.,Ltd.12年11月23日金曜日
ねぇ、けい               とりあえずタグリーダぽいのできたんだけど読               み取る時に、毎回選択画面がでてきてすっごい               使い勝手悪いんだけど、これもしかして対応ア         ...
毎回これがでるんじゃ                            問題の画面             だめよねぇ         サンプル・コード        https://github.com/yokmama/ykmjuku-s...
フォアグラウンド                ディスパッチ                     Re:Kayo-System Co.,Ltd.12年11月23日金曜日
フォアグラウンドディスパッチは、Activityがフォア  グラウンドにある場合において、他のアプリよりも優  先順位が高い設定を行うことができる仕組みで、これ    により選択画面なしでタグを受信できます。               まさに...
NfcAdapter    public void enableForegroundDispatch (Activity activity,    PendingIntent intent, IntentFilter[] filters, Str...
使用例)    public void onResume() {        super.onResume();        mAdapter.enableForegroundDispatch(this, pendingIntent,   ...
ACION_NDEF_DISCOVEREDの定義      IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);      try {         ...
使用例           public void onNewIntent(Intent intent) {               Tag tagFromIntent =           intent.getParcelableExt...
これで、NFCの受信からタグの取得                 までの説明は終わったわ。                   あとは作るだけ!                     頑張って!                   うん! ...
タグディスパッチのサンプル          https://github.com/yokmama/ykmjuku-samples/                     tree/master/NFCSample01            ...
次回予告                      Re:Kayo-System Co.,Ltd.12年11月23日金曜日
次回は、NDEFの解説と、ハンズオン形式           でNFC勤怠管理システムの作り方を解説し                たいと思っています。               時期:2013年1月中旬頃               場所...
Upcoming SlideShare
Loading in …5
×

関西支部 第二回 NFCLab勉強会 

1,424 views

Published on

Published in: Technology
  • Be the first to comment

関西支部 第二回 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日金曜日

×