SlideShare a Scribd company logo
1 of 31
Download to read offline
Android  NFCアプリ  
   ハンズオン	
 
     BRILLIANTSERVICE
   山下 智樹 / tomorrowkey
自己紹介	
 

•  山下 智樹 / Tomoki YAMASHITA

•  @tomorrowkey

•  株式会社ブリリアントサービス
想定する対象者	
 

•  Eclipseを使ってAndroidアプリを作ったことがある

•  Intentの発行ができる

•  Intent-Filterを使ってIntentの受信ができる
もくじ	
 

•  NFCとは
  o  一般的なNFCの説明


•  AndroidのNFCの仕組み
  o  AndroidのNFCの実装


•  ハンズオン
  o  NFC-IDを取得・表示するアプリの作成
NFCとは	
 
  なんぞや
NFCとは	
 
•  Near Field Communication
•  13.56MHz帯を使った近距離無線通信
  o  FeliCaやMIFAREなど

•  搬送波を使ってカードに給電する
  o  http://www.youtube.com/watch?v=xoQcdOux5rg

•  NFC Forumで仕様策定
  o  http://www.nfc-forum.org/home/

•  ISO/IEC 18092(NFC-IP1),ISO/IEC 21481(NFC-IP2)…
•  NFC Lab WIki
  o  https://sites.google.com/site/nfclabo/
チップの種類	
 
  一般名称          国際規格                                        使用例                                      主なチップメーカ

MIFARE   ISO/IEC  14443  Type  A   taspo                                                         NXP(旧フィリップス)

-­‐‑     ISO/IEC  14443  Type  B   運転免許証、住民基本台帳カード                                               Motorola

FeliCa   -­‐‑                      国内交通系ICカード、国内電子マネーカード                                         Sony

-­‐‑     ISO/IEC  15693            物流、小売


                                   NFC  IP-­‐‑1  ISO/IEC  18092   NFC  IP-­‐‑2  ISO/IEC  21481      NFC仕様による分類

                                               ⃝                              ⃝                  NFC-­‐‑A

                                                ×                             ⃝                  NFC-­‐‑B

                                               ⃝                              ⃝                  NFC-­‐‑F

                                                ×                             ⃝                  NFC-­‐‑V

                                              周辺の規格について hGps://sites.google.com/site/nfclabo/nfc-­‐‑standard
NFCの3つのモード	
 
•  Card Emulation Mode
   o  まるでカードのように振る舞う
•  R/W(Reader/Writer) Mode
   o    カードを読みこむ
   o    カードに書き込む
   o    NDEF(NFC Data Exchange Format)
   o    RTD(Record Type Definition)
•  P2P(Peer-to-Peer) Mode
   o  端末同士でデータのやり取りをする
   o  DEP(Data Exchange Protocol)
       •  NFC-DEP
             o  LLCP(Logical Link Control Protocol)
                  •  SNEP(Simple NDEF Exchange Protocol)
                       o  Android BEAM
       •  ISO-DEP
             o  FALP(FeliCa Adhoc Link Protocol)
AndroidのNFCの仕組み	
 
      どうなってるの
待ち受け時のモード	
 
                                                                 ←NFC  OFFの時




↑こんな設備で測りました


待ち受け時はRW  Modeです

ブリリアントサービス 省電力ガイド 	
hGp://bs-­‐‑power-­‐‑save-­‐‑project.blogspot.jp/   NFC  ONの時→
アプリケーションまでの道のり	
 
•  NFC Service
   o  NFCチップがいないか常にpollingをつづける
   o  NFCチップを発見した場合Intentを作成
   o  Intentを発行

•  NFC Application
   o  NFC対応であるIntent-Filterを予め定義しておく
   o  発行されたIntentを受信
   o  Intent(Extra)内に入っているデータを使って楽しむ
Intent内のデータ(1)	
 
•  NfcAdapter.EXTRA_ID
  o    “android.nfc.extra.ID”
  o    byte配列が入っている
  o    カードを識別するための製造ID
  o    製造時に付与される
  o    FeliCa → IDm MIFARE → UID
  o    同じ通信範囲内にカードがあった場合に識別する用途に使われる
  o    できるだけ一意に発行されるが、一意である保証はない
Intent内のデータ(2)	
 
•  NfcAdapter.EXTRA_NDEF_MESSAGES
  o  “android.nfc.extra.NDEF_MESSAGES”
  o  android.nfc.NdefMessage(Parcelable)が入っている
  o  カード内にNDEFデータが入っている場合のみ設定される
Intent内のデータ(3)	
 
•  NfcAdapter.EXTRA_TAG
  o  “android.nfc.extra.TAG”
  o  android.nfc.TAG(Parcelable)が入っている
  o  カードのメタ情報が入っている
       •  メモリサイズ
       •  カードの種類
  o  カードに直接コマンドを送るために使われる
       •  Tag → NfcF → transceive(byte[])
ハンズオン
こんなアプリを作ります	
 

•  待ち受け状態でカードを検出

•  アプリ起動

•  IDを表示する
実装方法は3通り	
 

•  待ち受け時にNFCタグを見つけた時に反応する方法 ←今回はコレ

•  アプリ起動時にだけNFCタグに反応する方法

•  両方
新しいプロジェクトを作る	
 
•    Project Name : NFC-Handson
•    Build Target : Android 2.3.3
•    Package Name : com.example.android.nfchandson
•    Create Activity : MainActivity
•    Minimum SDK : 10
AndroidManifest.xml	
 
•  PERMISSIONの追加
	
<uses-permission android:name="android.permission.NFC" />
AndroidManifest.xml	
 
•  Intent-Filterの追加
	
<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/nfc_tech_filter" />	




Tips	
	
android.nfc.action.TAG_DISCOVERED	
→  なんでもタグが見つかった場合	
android.nfc.action.NDEF_DISCOVERED	
→  NDEFデータが見つかった場合	
	
TAG  <  TECH  <  NDEF  の強さ

                                             hGp://developer.android.com/guide/topics/nfc/nfc.html
nfc_tech_filter.xml	
 
•  /res/xml/nfc_tech_filter.xmlを作成する
	
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">	
  <tech-list>	
    <tech>android.nfc.tech.NfcF</tech>	
  </tech-list>	
</resources>




Tips	
	
MIFAREの場合	
→  android.nfc.tech.NfcA  など	
ISO/IEC  15693の場合	
→  android.nfc.tech.NfcV  など	
NDEFの場合	
→  android.nfc.tech.NDEF  など	
   詳しくは…	
複数指定もアリ	
                        hGp://developer.android.com/guide/topics/nfc/nfc.html
とりあえず反応するアプリ完成	
 



•  実行してみよう
NFC-­‐‑IDの取得	
 
•  MainActivity#onCreate(:Bundle)でIDを取得する

Intent intent = getIntent();	
String action = intent.getAction();	
if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) {	
  byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);	
}
見やすい形式に変換する	
 
•  byte配列から文字列に変換するメソッドの作成
•  MainActivityに作成

private String bytesToText(byte[] bytes) {	
  StringBuilder buffer = new StringBuilder();	
  for (byte b : bytes) {	
     String hex = String.format("%02X", b);	
     buffer.append(hex).append(" ");	
  }	
  String text = buffer.toString().trim();	
  return text;	
}
byte配列からの変換	
 
•  先程作ったメソッドを使います

Intent intent = getIntent();	
String action = intent.getAction();	
if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) {	
  byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);	
  String text = bytesToText(rawId);	
}
レイアウトの修正	
 
•  /res/layout/main.xmlを修正します

<?xml version="1.0" encoding="utf-8"?>	
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"	
  android:layout_width="fill_parent"	
  android:layout_height="fill_parent"	
  android:orientation="vertical" >	
	
  <TextView	
    android:id="@+id/nfc_id_textview"   <!-- ←New!! -->	
    android:layout_width="fill_parent"	
    android:layout_height="wrap_content"	
    android:text="@string/hello" />	
	
</LinearLayout>
NFC-­‐‑IDの表示	
 
•  TextViewに表示します

Intent intent = getIntent();	
String action = intent.getAction();	
if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) {	
  byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);	
  String text = bytesToText(rawId);	
  TextView nfcIdTextView = (TextView)findViewById(R.id.nfc_id_textview); // ← New!!	
  nfcIdTextView.setText(id); // ← New!!	
}
完成!	
 


•  実行してみよう
課題	
 
•  FeliCa以外のカードに反応するようにしてみよう
  o  ヒント:android.nfc.tech.Xxx



•  どんなカードを読み取ったか表示してみよう
  o  ヒント:android.nfc.Tag#getTechList()



•  アプリ起動中のみ反応するようにしてみよう
  o  ヒント:NfcAdapter#enableForegroundDispatch()


•  同じActivityがいくつも起動してしまう事を回避するには
  o  ヒント:launchMode
情報	
 
•  Android NFC Tutorial
   o  http://developer.android.com/guide/topics/nfc/nfc.html

•  NFC Lab
   o  ML http://groups.google.com/group/nfc-lab
   o  Wiki https://sites.google.com/site/nfclabo/

•  NFC Forum
   o  http://www.nfc-forum.org/home/

•  @hiro99ma
   o  http://hiro99ma.blogspot.jp/
   o  http://twitter.com/hiro99ma
おわり

More Related Content

What's hot

月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号Hirokuma Ueno
 
Windows 10 mobileでnfc~suica・edy対応編~(公開用)
Windows 10 mobileでnfc~suica・edy対応編~(公開用)Windows 10 mobileでnfc~suica・edy対応編~(公開用)
Windows 10 mobileでnfc~suica・edy対応編~(公開用)Nobuaki Aoki
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎ken_kitahara
 
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)Takashi Takizawa
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況Isao Soma
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)Hirokuma Ueno
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
OpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うOpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うHironobu Saitoh
 
WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!mganeko
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414Kentaro Ebisawa
 
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)RKX1209
 
Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Takashi Takizawa
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたAkira Iwamoto
 
無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) Yuki Uchikoba
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発slankdev
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]DeNA
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門Masayuki Kobayashi
 

What's hot (20)

月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号月刊NDEF 2013年 1、2、3月号
月刊NDEF 2013年 1、2、3月号
 
Windows 10 mobileでnfc~suica・edy対応編~(公開用)
Windows 10 mobileでnfc~suica・edy対応編~(公開用)Windows 10 mobileでnfc~suica・edy対応編~(公開用)
Windows 10 mobileでnfc~suica・edy対応編~(公開用)
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)UnboundとDNSSEC(OSC2011 Tokyo/Spring)
UnboundとDNSSEC(OSC2011 Tokyo/Spring)
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況FeliCa/NFCの概説とAndroidの対応状況
FeliCa/NFCの概説とAndroidの対応状況
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)月刊NDEF 2013年2月号(臨時号)
月刊NDEF 2013年2月号(臨時号)
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
about Tcpreplay
about Tcpreplayabout Tcpreplay
about Tcpreplay
 
OpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使うOpenSSHの認証に証明書を使う
OpenSSHの認証に証明書を使う
 
WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!WebRTCのオーディオ処理の謎、誰か教えて!
WebRTCのオーディオ処理の謎、誰か教えて!
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)scryptos onsite(plaid CTF)
scryptos onsite(plaid CTF)
 
Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)Unboundの最適化(OSC2011 Tokyo/Spring)
Unboundの最適化(OSC2011 Tokyo/Spring)
 
ConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみたConfD で Linux にNetconfを喋らせてみた
ConfD で Linux にNetconfを喋らせてみた
 
無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル)
 
DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発DPDKを用いたネットワークスタック,高性能通信基盤開発
DPDKを用いたネットワークスタック,高性能通信基盤開発
 
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
スマホゲームのチート手法とその対策 [DeNA TechCon 2019]
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門
 

Viewers also liked

Automating Your Life: A look at NFC
Automating Your Life: A look at NFC Automating Your Life: A look at NFC
Automating Your Life: A look at NFC Mitchell Muenster
 
Leverage RFID with NFC for Better ROI - by Steve McRae
Leverage RFID with NFC for Better ROI - by Steve McRaeLeverage RFID with NFC for Better ROI - by Steve McRae
Leverage RFID with NFC for Better ROI - by Steve McRaeMerchant360, Inc.
 
Trf7960 and trf7970 a comparison
Trf7960 and trf7970 a comparisonTrf7960 and trf7970 a comparison
Trf7960 and trf7970 a comparisonHà Thanh
 
Vanderhoof smartcard-roadmap
Vanderhoof smartcard-roadmapVanderhoof smartcard-roadmap
Vanderhoof smartcard-roadmapHai Nguyen
 
Lp 2010 operation-theory
Lp 2010 operation-theoryLp 2010 operation-theory
Lp 2010 operation-theoryNguyen Duc Anh
 
Introducción a la tecnología NFC
Introducción a la tecnología NFCIntroducción a la tecnología NFC
Introducción a la tecnología NFCAditium
 
NFC - quick primer
NFC - quick primerNFC - quick primer
NFC - quick primeramsanjeev
 
Contactless (Proximity) Smartcards
Contactless (Proximity) SmartcardsContactless (Proximity) Smartcards
Contactless (Proximity) SmartcardsAnshuman Sinha
 
Contactless NFC Tags For Mobile Loyalty
Contactless NFC Tags For Mobile LoyaltyContactless NFC Tags For Mobile Loyalty
Contactless NFC Tags For Mobile LoyaltyMerchant360, Inc.
 
NFC(Near Field Communication)
NFC(Near Field Communication)NFC(Near Field Communication)
NFC(Near Field Communication)ADARSH KUMAR
 
NFC Technology
NFC TechnologyNFC Technology
NFC TechnologyNeha Singh
 
NEAR FIELD COMMUNICATION
NEAR FIELD COMMUNICATIONNEAR FIELD COMMUNICATION
NEAR FIELD COMMUNICATIONHarisankar U K
 
NFC technical presentation
NFC technical presentationNFC technical presentation
NFC technical presentationAkshat Rohatgi
 
Merchant360 SP4G(tm) NFC Coverage Walls Counters and Floors
Merchant360 SP4G(tm) NFC Coverage Walls Counters and FloorsMerchant360 SP4G(tm) NFC Coverage Walls Counters and Floors
Merchant360 SP4G(tm) NFC Coverage Walls Counters and FloorsMerchant360, Inc.
 
Winmate trusted mobile security solution
Winmate trusted mobile security solutionWinmate trusted mobile security solution
Winmate trusted mobile security solutionAllan (Yun-Chin) Lin
 

Viewers also liked (20)

NFS - Company presentation 2015
NFS - Company presentation 2015NFS - Company presentation 2015
NFS - Company presentation 2015
 
Automating Your Life: A look at NFC
Automating Your Life: A look at NFC Automating Your Life: A look at NFC
Automating Your Life: A look at NFC
 
Leverage RFID with NFC for Better ROI - by Steve McRae
Leverage RFID with NFC for Better ROI - by Steve McRaeLeverage RFID with NFC for Better ROI - by Steve McRae
Leverage RFID with NFC for Better ROI - by Steve McRae
 
Overview chip
Overview chipOverview chip
Overview chip
 
Trf7960 and trf7970 a comparison
Trf7960 and trf7970 a comparisonTrf7960 and trf7970 a comparison
Trf7960 and trf7970 a comparison
 
Vanderhoof smartcard-roadmap
Vanderhoof smartcard-roadmapVanderhoof smartcard-roadmap
Vanderhoof smartcard-roadmap
 
Lp 2010 operation-theory
Lp 2010 operation-theoryLp 2010 operation-theory
Lp 2010 operation-theory
 
Rfid簡報
Rfid簡報Rfid簡報
Rfid簡報
 
Introducción a la tecnología NFC
Introducción a la tecnología NFCIntroducción a la tecnología NFC
Introducción a la tecnología NFC
 
NFC - quick primer
NFC - quick primerNFC - quick primer
NFC - quick primer
 
Contactless (Proximity) Smartcards
Contactless (Proximity) SmartcardsContactless (Proximity) Smartcards
Contactless (Proximity) Smartcards
 
Civintec introduction 2015
Civintec introduction 2015Civintec introduction 2015
Civintec introduction 2015
 
Contactless NFC Tags For Mobile Loyalty
Contactless NFC Tags For Mobile LoyaltyContactless NFC Tags For Mobile Loyalty
Contactless NFC Tags For Mobile Loyalty
 
NFC(Near Field Communication)
NFC(Near Field Communication)NFC(Near Field Communication)
NFC(Near Field Communication)
 
Nfc
NfcNfc
Nfc
 
NFC Technology
NFC TechnologyNFC Technology
NFC Technology
 
NEAR FIELD COMMUNICATION
NEAR FIELD COMMUNICATIONNEAR FIELD COMMUNICATION
NEAR FIELD COMMUNICATION
 
NFC technical presentation
NFC technical presentationNFC technical presentation
NFC technical presentation
 
Merchant360 SP4G(tm) NFC Coverage Walls Counters and Floors
Merchant360 SP4G(tm) NFC Coverage Walls Counters and FloorsMerchant360 SP4G(tm) NFC Coverage Walls Counters and Floors
Merchant360 SP4G(tm) NFC Coverage Walls Counters and Floors
 
Winmate trusted mobile security solution
Winmate trusted mobile security solutionWinmate trusted mobile security solution
Winmate trusted mobile security solution
 

Similar to Android NFCアプリハンズオン

NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~Kouta Imanaka
 
About nfc
About nfcAbout nfc
About nfctreby
 
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -Ikkai Takeshi
 
Fukuoka NFC Hack 3
Fukuoka NFC Hack 3Fukuoka NFC Hack 3
Fukuoka NFC Hack 3treby
 
福岡NFC勉強会
福岡NFC勉強会福岡NFC勉強会
福岡NFC勉強会treby
 
便利なNFC ~利用シーンと技術の動向~
便利なNFC  ~利用シーンと技術の動向~便利なNFC  ~利用シーンと技術の動向~
便利なNFC ~利用シーンと技術の動向~NFC Forum
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうtreby
 
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCa
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCaIC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCa
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCaIsao Soma
 
ハンドメイドNFCワークショップ@アキバ大好き祭り2013
ハンドメイドNFCワークショップ@アキバ大好き祭り2013ハンドメイドNFCワークショップ@アキバ大好き祭り2013
ハンドメイドNFCワークショップ@アキバ大好き祭り2013Yasuhiro Ohsaka
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
流通/小売業向け Windows ストア アプリ 開発セミナー資料
流通/小売業向け  Windows ストア アプリ 開発セミナー資料流通/小売業向け  Windows ストア アプリ 開発セミナー資料
流通/小売業向け Windows ストア アプリ 開発セミナー資料Isao Soma
 
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタKenichi Kambara
 
NFCIP-1を斜め読み
NFCIP-1を斜め読みNFCIP-1を斜め読み
NFCIP-1を斜め読みHirokuma Ueno
 
支援リクエストの紹介 abc spring 2013 特別講演
支援リクエストの紹介 abc spring 2013 特別講演支援リクエストの紹介 abc spring 2013 特別講演
支援リクエストの紹介 abc spring 2013 特別講演Kaoru Tsukamoto
 
一人でもSNEP開発
一人でもSNEP開発一人でもSNEP開発
一人でもSNEP開発Hirokuma Ueno
 
Galapagosization environment
Galapagosization environmentGalapagosization environment
Galapagosization environmentTakao Tetsuro
 

Similar to Android NFCアプリハンズオン (20)

NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
 
About nfc
About nfcAbout nfc
About nfc
 
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
Windows8 x NFC - Windows8 Developers カンファレンス Vol2.0 -
 
Fukuoka NFC Hack 3
Fukuoka NFC Hack 3Fukuoka NFC Hack 3
Fukuoka NFC Hack 3
 
福岡NFC勉強会
福岡NFC勉強会福岡NFC勉強会
福岡NFC勉強会
 
便利なNFC ~利用シーンと技術の動向~
便利なNFC  ~利用シーンと技術の動向~便利なNFC  ~利用シーンと技術の動向~
便利なNFC ~利用シーンと技術の動向~
 
AndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もうAndroidでFeliCaの履歴を読もう
AndroidでFeliCaの履歴を読もう
 
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCa
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCaIC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCa
IC CARD WORLD 2011 - Sony Android tablet & NFC/FeliCa
 
ハンドメイドNFCワークショップ@アキバ大好き祭り2013
ハンドメイドNFCワークショップ@アキバ大好き祭り2013ハンドメイドNFCワークショップ@アキバ大好き祭り2013
ハンドメイドNFCワークショップ@アキバ大好き祭り2013
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
NFCの汎化
NFCの汎化NFCの汎化
NFCの汎化
 
FALPとLLCP
FALPとLLCPFALPとLLCP
FALPとLLCP
 
流通/小売業向け Windows ストア アプリ 開発セミナー資料
流通/小売業向け  Windows ストア アプリ 開発セミナー資料流通/小売業向け  Windows ストア アプリ 開発セミナー資料
流通/小売業向け Windows ストア アプリ 開発セミナー資料
 
Beam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタBeam利用アプリ紹介+関連技術ネタ
Beam利用アプリ紹介+関連技術ネタ
 
NFCIP-1を斜め読み
NFCIP-1を斜め読みNFCIP-1を斜め読み
NFCIP-1を斜め読み
 
支援リクエストの紹介 abc spring 2013 特別講演
支援リクエストの紹介 abc spring 2013 特別講演支援リクエストの紹介 abc spring 2013 特別講演
支援リクエストの紹介 abc spring 2013 特別講演
 
2015圧縮ゼミ
2015圧縮ゼミ2015圧縮ゼミ
2015圧縮ゼミ
 
Nfc lab浜松勉強会
Nfc lab浜松勉強会Nfc lab浜松勉強会
Nfc lab浜松勉強会
 
一人でもSNEP開発
一人でもSNEP開発一人でもSNEP開発
一人でもSNEP開発
 
Galapagosization environment
Galapagosization environmentGalapagosization environment
Galapagosization environment
 

More from Tomoki YAMASHITA

Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android developmentTomoki YAMASHITA
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくTomoki YAMASHITA
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみたTomoki YAMASHITA
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK ToolsのおさらいTomoki YAMASHITA
 
Ndefってなんだろう
NdefってなんだろうNdefってなんだろう
NdefってなんだろうTomoki YAMASHITA
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-Tomoki YAMASHITA
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてますTomoki YAMASHITA
 

More from Tomoki YAMASHITA (10)

Few command line tools for help Android development
Few command line tools for help Android developmentFew command line tools for help Android development
Few command line tools for help Android development
 
ぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなくぼくのビルドはにゃあとなく
ぼくのビルドはにゃあとなく
 
UUID
UUIDUUID
UUID
 
Android Studio Pluginを使ってみた
Android Studio Pluginを使ってみたAndroid Studio Pluginを使ってみた
Android Studio Pluginを使ってみた
 
Android SDK Toolsのおさらい
Android SDK ToolsのおさらいAndroid SDK Toolsのおさらい
Android SDK Toolsのおさらい
 
What is androider
What is androiderWhat is androider
What is androider
 
Ndefってなんだろう
NdefってなんだろうNdefってなんだろう
Ndefってなんだろう
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
 
NFC QUEST作ったよ
NFC QUEST作ったよNFC QUEST作ったよ
NFC QUEST作ったよ
 
Dialogを使うときはこうしてます
Dialogを使うときはこうしてますDialogを使うときはこうしてます
Dialogを使うときはこうしてます
 

Android NFCアプリハンズオン

  • 1. Android  NFCアプリ   ハンズオン BRILLIANTSERVICE 山下 智樹 / tomorrowkey
  • 2. 自己紹介 •  山下 智樹 / Tomoki YAMASHITA •  @tomorrowkey •  株式会社ブリリアントサービス
  • 3. 想定する対象者 •  Eclipseを使ってAndroidアプリを作ったことがある •  Intentの発行ができる •  Intent-Filterを使ってIntentの受信ができる
  • 4. もくじ •  NFCとは o  一般的なNFCの説明 •  AndroidのNFCの仕組み o  AndroidのNFCの実装 •  ハンズオン o  NFC-IDを取得・表示するアプリの作成
  • 5. NFCとは なんぞや
  • 6. NFCとは •  Near Field Communication •  13.56MHz帯を使った近距離無線通信 o  FeliCaやMIFAREなど •  搬送波を使ってカードに給電する o  http://www.youtube.com/watch?v=xoQcdOux5rg •  NFC Forumで仕様策定 o  http://www.nfc-forum.org/home/ •  ISO/IEC 18092(NFC-IP1),ISO/IEC 21481(NFC-IP2)… •  NFC Lab WIki o  https://sites.google.com/site/nfclabo/
  • 7. チップの種類 一般名称 国際規格 使用例 主なチップメーカ MIFARE ISO/IEC  14443  Type  A taspo NXP(旧フィリップス) -­‐‑ ISO/IEC  14443  Type  B 運転免許証、住民基本台帳カード Motorola FeliCa -­‐‑ 国内交通系ICカード、国内電子マネーカード Sony -­‐‑ ISO/IEC  15693 物流、小売 NFC  IP-­‐‑1  ISO/IEC  18092 NFC  IP-­‐‑2  ISO/IEC  21481 NFC仕様による分類 ⃝ ⃝ NFC-­‐‑A × ⃝ NFC-­‐‑B ⃝ ⃝ NFC-­‐‑F × ⃝ NFC-­‐‑V 周辺の規格について hGps://sites.google.com/site/nfclabo/nfc-­‐‑standard
  • 8. NFCの3つのモード •  Card Emulation Mode o  まるでカードのように振る舞う •  R/W(Reader/Writer) Mode o  カードを読みこむ o  カードに書き込む o  NDEF(NFC Data Exchange Format) o  RTD(Record Type Definition) •  P2P(Peer-to-Peer) Mode o  端末同士でデータのやり取りをする o  DEP(Data Exchange Protocol) •  NFC-DEP o  LLCP(Logical Link Control Protocol) •  SNEP(Simple NDEF Exchange Protocol) o  Android BEAM •  ISO-DEP o  FALP(FeliCa Adhoc Link Protocol)
  • 9. AndroidのNFCの仕組み どうなってるの
  • 10. 待ち受け時のモード ←NFC  OFFの時 ↑こんな設備で測りました 待ち受け時はRW  Modeです ブリリアントサービス 省電力ガイド hGp://bs-­‐‑power-­‐‑save-­‐‑project.blogspot.jp/ NFC  ONの時→
  • 11. アプリケーションまでの道のり •  NFC Service o  NFCチップがいないか常にpollingをつづける o  NFCチップを発見した場合Intentを作成 o  Intentを発行 •  NFC Application o  NFC対応であるIntent-Filterを予め定義しておく o  発行されたIntentを受信 o  Intent(Extra)内に入っているデータを使って楽しむ
  • 12. Intent内のデータ(1) •  NfcAdapter.EXTRA_ID o  “android.nfc.extra.ID” o  byte配列が入っている o  カードを識別するための製造ID o  製造時に付与される o  FeliCa → IDm MIFARE → UID o  同じ通信範囲内にカードがあった場合に識別する用途に使われる o  できるだけ一意に発行されるが、一意である保証はない
  • 13. Intent内のデータ(2) •  NfcAdapter.EXTRA_NDEF_MESSAGES o  “android.nfc.extra.NDEF_MESSAGES” o  android.nfc.NdefMessage(Parcelable)が入っている o  カード内にNDEFデータが入っている場合のみ設定される
  • 14. Intent内のデータ(3) •  NfcAdapter.EXTRA_TAG o  “android.nfc.extra.TAG” o  android.nfc.TAG(Parcelable)が入っている o  カードのメタ情報が入っている •  メモリサイズ •  カードの種類 o  カードに直接コマンドを送るために使われる •  Tag → NfcF → transceive(byte[])
  • 18. 新しいプロジェクトを作る •  Project Name : NFC-Handson •  Build Target : Android 2.3.3 •  Package Name : com.example.android.nfchandson •  Create Activity : MainActivity •  Minimum SDK : 10
  • 19. AndroidManifest.xml •  PERMISSIONの追加 <uses-permission android:name="android.permission.NFC" />
  • 20. AndroidManifest.xml •  Intent-Filterの追加 <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/nfc_tech_filter" /> Tips android.nfc.action.TAG_DISCOVERED →  なんでもタグが見つかった場合 android.nfc.action.NDEF_DISCOVERED →  NDEFデータが見つかった場合 TAG  <  TECH  <  NDEF  の強さ hGp://developer.android.com/guide/topics/nfc/nfc.html
  • 21. nfc_tech_filter.xml •  /res/xml/nfc_tech_filter.xmlを作成する <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcF</tech> </tech-list> </resources> Tips MIFAREの場合 →  android.nfc.tech.NfcA  など ISO/IEC  15693の場合 →  android.nfc.tech.NfcV  など NDEFの場合 →  android.nfc.tech.NDEF  など 詳しくは… 複数指定もアリ hGp://developer.android.com/guide/topics/nfc/nfc.html
  • 23. NFC-­‐‑IDの取得 •  MainActivity#onCreate(:Bundle)でIDを取得する Intent intent = getIntent(); String action = intent.getAction(); if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) { byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); }
  • 24. 見やすい形式に変換する •  byte配列から文字列に変換するメソッドの作成 •  MainActivityに作成 private String bytesToText(byte[] bytes) { StringBuilder buffer = new StringBuilder(); for (byte b : bytes) { String hex = String.format("%02X", b); buffer.append(hex).append(" "); } String text = buffer.toString().trim(); return text; }
  • 25. byte配列からの変換 •  先程作ったメソッドを使います Intent intent = getIntent(); String action = intent.getAction(); if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) { byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); String text = bytesToText(rawId); }
  • 26. レイアウトの修正 •  /res/layout/main.xmlを修正します <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/nfc_id_textview" <!-- ←New!! --> android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
  • 27. NFC-­‐‑IDの表示 •  TextViewに表示します Intent intent = getIntent(); String action = intent.getAction(); if (action.equals(NfcAdapter.ACTION_TECH_DISCOVERED)) { byte[] rawId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); String text = bytesToText(rawId); TextView nfcIdTextView = (TextView)findViewById(R.id.nfc_id_textview); // ← New!! nfcIdTextView.setText(id); // ← New!! }
  • 29. 課題 •  FeliCa以外のカードに反応するようにしてみよう o  ヒント:android.nfc.tech.Xxx •  どんなカードを読み取ったか表示してみよう o  ヒント:android.nfc.Tag#getTechList() •  アプリ起動中のみ反応するようにしてみよう o  ヒント:NfcAdapter#enableForegroundDispatch() •  同じActivityがいくつも起動してしまう事を回避するには o  ヒント:launchMode
  • 30. 情報 •  Android NFC Tutorial o  http://developer.android.com/guide/topics/nfc/nfc.html •  NFC Lab o  ML http://groups.google.com/group/nfc-lab o  Wiki https://sites.google.com/site/nfclabo/ •  NFC Forum o  http://www.nfc-forum.org/home/ •  @hiro99ma o  http://hiro99ma.blogspot.jp/ o  http://twitter.com/hiro99ma