2012年8月3日金曜日

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageとNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageはActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordはNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

AndroidでRTD Textを読む

RTD Textを読む

AndroidでRTD Textを読み取ります。
AndroidではNdefMessageとNdefRecordのクラスが用意されています。
NdefRecordはヘッダまでしかパースされないので
PAYLOADを自分でパースする必要があります。

NDEF Messageを取得する

NdefMessageはActivity#onNewIntent(:Intent):void のIntentのExtraに
NfcAdapter.EXTRA_NDEF_MESSAGESという名前で格納されています。
形式はParcelable[]なので一時的にParcelable[]で保持しておき
その中のNdefMessageを取り出します。

Ndef Recordを取得する

NdefRecordはNdefMessage#getRecords():NdefRecord[] で取得します。

RTD Textの判定をする

Textの判定はTNFがWELL_KNOWNになっていることと、TYPEが'T'になっていることを確認します。
NdefRecordからTNFを取得するにはNdefRecord#getTnf():shortを使います。
また、各TNFはNdefRecordに定義されているのでその定数を使います。
NdefRecordからTYPEを取得するにはNdefRecord#getType():byte[]を使います。
また、RTDのTYPEはNdefRecordに定義されているのでその定数を使います。

RTD Textをパースする

NdefRecordからPAYLOADを取得するにはNdefRecord#getPayload():byte[]を使用します。
PAYLOADが取得できたので、RTD Textの仕様に従いパースしていきます。
RTD Textの仕様についてはこちらを御覧ください。
ブリリアントサービス NFC技術ブログ: RTD Textとは
例では文字列(言語コード)という内容で返しています。

実行イメージ


ソースコード

https://github.com/bs-nfc/ReadRTDText

カスタマー開発部 山下智樹

2012年8月2日木曜日

NDEFとは

NFC Data Exchange Formatと呼ばれるもので、NFCでデータのやり取りをする際に使われるデータ・フォーマットです。
仕様書はこちらにあります


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#ndefts


この内容についてNFC Labにて発表をしました。
資料はこちらです。
http://www.slideshare.net/tomorrowkey/ndef-13784268

Ndefの構成


NDEFには一つのNdef Messageが含まれます。
またNdef Messageには0個以上のNdef Recordが含まれます。

Ndef Recordの構成


Ndef Recordは大きくヘッダとペイロードの2つに分けることができます。

  • ヘッダ
    • MB(Message Begin)
      • 1bit
      • このフラグが1になっていると、最初のNdef Recordであることを表します。
    • ME(Message End)
      • 1bit
      • このフラグが1になっていると、最後のNdefRecordであることを表します。
    • CR(Chunked Flag)
      • 1bit
      • このフラグが1になっていると、分割されたNdef Messageであることを表します。
    • SR(Short Record)
      • 1bit
      • このフラグが1になっていると、Ndef Message全体が255Byte以下であることを表します。
      • またその場合、Payload Lengthが1Byteになります。(データサイズの節約になります)
    • IL(ID Length)
      • 1bit
      • このフラグが1になっていると、IDが格納されていることを表します。
    • TNF(Type Name Format)
      • 3bit
      • TYPEの種類を表します。
        • 0x00 Empty
        • 0x01 NFC Forum well-known-type
        • 0x02 Media-type as define in RFC2046
        • 0x03 Absolute URI as define in RFC 3986
        • 0x04 NFC Forum external type
        • 0x05 Unknown
        • 0x06 Unchanged
        • 0x07 Reserved
      • ここの内容によってTYPE の解釈が変わります。
    • TYPE LENGTH
      • 1Byte
      • TYPEフィールドの長さを表します。
      • 符号なし整数
    • PAYLOAD LENGTH
      • 1Byte or 4Byte
      • PAYLOADの長さを表します。
      • ビッグエンディアン、符号なし整数
      • SRが1だった場合、1Byteになります。
    • ID LENGTH
      • 1Byte
      • IDの長さを指定します。
      • 符号なし整数
    • TYPE
      • TYPE LENGTHによって長さが変わります。
      • TNFの値によって内容の解釈が変わります。
      • 例えば0x01 NFC Forum well-known-type だった場合
        • 'T' -> Text
        • 'U' -> URI
        • 'Sp' -> Smart Poster
    • ID
      • ILによって存在しない場合があります。
      • ID LENGTHによって長さが変わります。
      • Ndef RecordのIDを設定することができます。
  • ペイロード
    • データ本体
    • TYPEとTNFによってフォーマットが異なります。
    • well-known-typeについては別エントリにて解説します。



カスタマー開発部 山下智樹

NDEFとは

NDEFとは

NFC Data Exchange Formatと呼ばれるもので、NFCでデータのやり取りをする際に使われるデータ・フォーマットです。
仕様書はこちらにあります


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#ndefts


この内容についてNFC Labにて発表をしました。
資料はこちらです。
http://www.slideshare.net/tomorrowkey/ndef-13784268

Ndefの構成


NDEFには一つのNdef Messageが含まれます。
またNdef Messageには0個以上のNdef Recordが含まれます。

Ndef Recordの構成


Ndef Recordは大きくヘッダとペイロードの2つに分けることができます。

  • ヘッダ
    • MB(Message Begin)
      • 1bit
      • このフラグが1になっていると、最初のNdef Recordであることを表します。
    • ME(Message End)
      • 1bit
      • このフラグが1になっていると、最後のNdefRecordであることを表します。
    • CR(Chunked Flag)
      • 1bit
      • このフラグが1になっていると、分割されたNdef Messageであることを表します。
    • SR(Short Record)
      • 1bit
      • このフラグが1になっていると、Ndef Message全体が255Byte以下であることを表します。
      • またその場合、Payload Lengthが1Byteになります。(データサイズの節約になります)
    • IL(ID Length)
      • 1bit
      • このフラグが1になっていると、IDが格納されていることを表します。
    • TNF(Type Name Format)
      • 3bit
      • TYPEの種類を表します。
        • 0x00 Empty
        • 0x01 NFC Forum well-known-type
        • 0x02 Media-type as define in RFC2046
        • 0x03 Absolute URI as define in RFC 3986
        • 0x04 NFC Forum external type
        • 0x05 Unknown
        • 0x06 Unchanged
        • 0x07 Reserved
      • ここの内容によってTYPE の解釈が変わります。
    • TYPE LENGTH
      • 1Byte
      • TYPEフィールドの長さを表します。
      • 符号なし整数
    • PAYLOAD LENGTH
      • 1Byte or 4Byte
      • PAYLOADの長さを表します。
      • ビッグエンディアン、符号なし整数
      • SRが1だった場合、1Byteになります。
    • ID LENGTH
      • 1Byte
      • IDの長さを指定します。
      • 符号なし整数
    • TYPE
      • TYPE LENGTHによって長さが変わります。
      • TNFの値によって内容の解釈が変わります。
      • 例えば0x01 NFC Forum well-known-type だった場合
        • 'T' -> Text
        • 'U' -> URI
        • 'Sp' -> Smart Poster
    • ID
      • ILによって存在しない場合があります。
      • ID LENGTHによって長さが変わります。
      • Ndef RecordのIDを設定することができます。
  • ペイロード
    • データ本体
    • TYPEとTNFによってフォーマットが異なります。
    • well-known-typeについては別エントリにて解説します。



カスタマー開発部 山下智樹

RTD Textとは

Record Type DefinitionのTextフォーマットのことを指します。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

Textフォーマットの構造

  • Encode
    • 1bit
    • エンコードを表します。
      • 0 -> UTF-8
      • 1 -> UTF-16
  • RFU
    • 1bit
    • Reserved for Future Use
  • Language Code Length
    • 6bit
    • 言語コードの長さを表します。
  • Language Code
    • Language Code Lengthによって長さが変わります。
    • 言語コードを表します。(ISO/IANA)
    • US-ASCIIエンコードで格納します。
  • Actual Text
    • 実際のテキストを格納します。
    • Encodeにて指定したエンコードで格納します。

Textを格納したNDEFの例

"Hello, World." を表したNDEFは以下のようになります。

D1 01 10 54
02 65 6E 48
65 6C 6C 6F
2C 20 57 6F
72 6C 64 2E

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x10 -> 16
  • TYPE 0x54 -> 'T'
  • PAYLOAD
    • Encoding 0x00 -> UTF-8
    • Language Code Length 0x02
    • Language Code 0x65 0x6E -> "en"
    • Actual Text
      • 0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x6F 0x72 0x6C 0x64 0x2E
      • -> "Hello, World."

カスタマー開発部 山下智樹

RTD Textとは

RTD Textとは

Record Type DefinitionのTextフォーマットのことを指します。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds

Textフォーマットの構造

  • Encode
    • 1bit
    • エンコードを表します。
      • 0 -> UTF-8
      • 1 -> UTF-16
  • RFU
    • 1bit
    • Reserved for Future Use
  • Language Code Length
    • 6bit
    • 言語コードの長さを表します。
  • Language Code
    • Language Code Lengthによって長さが変わります。
    • 言語コードを表します。(ISO/IANA)
    • US-ASCIIエンコードで格納します。
  • Actual Text
    • 実際のテキストを格納します。
    • Encodeにて指定したエンコードで格納します。

Textを格納したNDEFの例

"Hello, World." を表したNDEFは以下のようになります。

D1 01 10 54
02 65 6E 48
65 6C 6C 6F
2C 20 57 6F
72 6C 64 2E

  • FLAGS
    • MB 0x01
    • ME 0x01
    • CF 0x00
    • SR 0x01
    • IL 0x00
  • TNF 0x01 (Well Known Type)
  • TYPE LENGTH 0x01
  • PAYLOAD LENGTH 0x10 -> 16
  • TYPE 0x54 -> 'T'
  • PAYLOAD
    • Encoding 0x00 -> UTF-8
    • Language Code Length 0x02
    • Language Code 0x65 0x6E -> "en"
    • Actual Text
      • 0x48 0x65 0x6C 0x6C 0x6F 0x2C 0x20 0x57 0x6F 0x72 0x6C 0x64 0x2E
      • -> "Hello, World."

カスタマー開発部 山下智樹

RTDとは

Record Type Definitionの略称で、NDEFのTNFにWell Known Typeが指定された際に、使用できるTYPEです。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds


2012年8月時点では以下の種類のフォーマットがあります。

  • Text
    • 複数の言語のテキストを効率的に格納するためのフォーマットです。
  • URI
    • URI(Uniform Resource Identifier)を効率的に格納するフォーマットです。
  • SmartPoster
    • URLやSMS,電話番号などを格納するフォーマットです。
    • このフォーマットはTextのブロックとURIのブロックで構成されています。
  • GenericControl
    • NFCの通信を介して他のデバイス、タグに特定のアクション(アプリケーションの起動やモードの変更など)を要求する簡単な方法を提供します。
  • Signature
    • NDEFに署名を追加するためのフォーマットです。

カスタマー開発部 山下智樹

RTDとは

RTDとは

Record Type Definitionの略称で、NDEFのTNFにWell Known Typeが指定された際に、使用できるTYPEです。
仕様書はこちらにあります。


NFC Forum : Technical Specifications
http://www.nfc-forum.org/specs/spec_list/#rtds


2012年8月時点では以下の種類のフォーマットがあります。

  • Text
    • 複数の言語のテキストを効率的に格納するためのフォーマットです。
  • URI
    • URI(Uniform Resource Identifier)を効率的に格納するフォーマットです。
  • SmartPoster
    • URLやSMS,電話番号などを格納するフォーマットです。
    • このフォーマットはTextのブロックとURIのブロックで構成されています。
  • GenericControl
    • NFCの通信を介して他のデバイス、タグに特定のアクション(アプリケーションの起動やモードの変更など)を要求する簡単な方法を提供します。
  • Signature
    • NDEFに署名を追加するためのフォーマットです。

カスタマー開発部 山下智樹

2012年7月25日水曜日

作るもの

  • ホームアプリでNFCに反応するアプリを作る
  • タグの種類によって制限する

解説

AndroidManifest.xml

1. NFCのIntentFilterを定義する
タグの種類によって制限をかけたいので、TECH_DISCOVEREDというアクションを設定します。


2. 制限するタグの定義ファイルを設定する
タグを制限するにはxmlファイルを定義する必要があります。


/res/xml/nfc_tech_filter.xml

1. 制限するタグを定義する
NfcFのみ反応したい場合、以下のように定義します。

NfcFかつNdefが定義されている場合のみ反応したい場合、以下のように定義します。

NfcFとNfcA両方に反応したい場合、以下のように定義します。


HomeActivity.java

1. Intentを受信したらNFC-IDを表示する
NFCのIntentが呼ばれた時にNFC-IDを取得し、Toastに表示します。
Intentを受信するイベントはアプリが起動する場合と、バックスタックにいる場合があるので
onCreate(:Bundle):void とonNewIntent(:Intent):void の2ヶ所から呼び出しています。


実行イメージ

ソースコード

https://github.com/bs-nfc/NFCHandlerOnHome

カスタマー開発部 山下智樹

アプリを起動していなくてもNFCに反応するアプリを作る

作るもの

  • ホームアプリでNFCに反応するアプリを作る
  • タグの種類によって制限する

解説

AndroidManifest.xml

1. NFCのIntentFilterを定義する
タグの種類によって制限をかけたいので、TECH_DISCOVEREDというアクションを設定します。


2. 制限するタグの定義ファイルを設定する
タグを制限するにはxmlファイルを定義する必要があります。


/res/xml/nfc_tech_filter.xml

1. 制限するタグを定義する
NfcFのみ反応したい場合、以下のように定義します。

NfcFかつNdefが定義されている場合のみ反応したい場合、以下のように定義します。

NfcFとNfcA両方に反応したい場合、以下のように定義します。


HomeActivity.java

1. Intentを受信したらNFC-IDを表示する
NFCのIntentが呼ばれた時にNFC-IDを取得し、Toastに表示します。
Intentを受信するイベントはアプリが起動する場合と、バックスタックにいる場合があるので
onCreate(:Bundle):void とonNewIntent(:Intent):void の2ヶ所から呼び出しています。


実行イメージ

ソースコード

https://github.com/bs-nfc/NFCHandlerOnHome

カスタマー開発部 山下智樹

2012年7月20日金曜日

指定するタグの種類について

AndroidでNFC対応アプリを作成する場合、どのタグに反応するかを指定することができます。(ACTION_TAG_DISCOVEREDの場合必要ありません)
指定できるタグの種類は以下があります。

  • IsoDep
  • MifareClassic
  • MifareUltralight
  • Ndef
  • NdefFormattable
  • NfcA
  • NfcB
  • NfcF
  • NfcV

これらのクラスはandroid.nfc.techパッケージに定義されています。
それぞれを説明します。

  • IsoDep
    • ISO-DEP(ISO/IEC 14443-4 DataExchangeProtocol)にアクセスできる
    • NfcAもしくはNfcBである
  • MifareClassic
    • NXP MifareClassic
    • NfcAである
  • MifareUltralight
    • NXP MifareUltralight
    • NfcAである
  • Ndef
    • Ndefにフォーマットされているタグ
  • NdefFormattable
    • Ndefにフォーマットできるタグ
  • NfcA
    • ISO/IEC 14443 TypeA
    • Mifare系がこれに該当する
  • NfcB
    • ISO/IEC 14443 TypeB
    • 日本の公共団体発行のカード等が該当する
  • NfcF
    • FeliCa系がこれに該当する
  • NfcV
    • いわゆる近傍型と呼ばれるタグの種類
    • ISO/IEC 15693
    • ICODE
    • NFCチップによっては対応していない場合があります

具体的にどれなんだろう

どのようなタグが該当するか、私の手持ちのタグをかざしてみます。

Suica

  • NfcF


Taspo

  • NdefFormattable
  • MifareClassic
  • NfcA


運転免許証

  • IsoDep
  • NfcB


Edy

  • NfcF


Clipper Card

  • NdefFormattable
  • IsoDep
  • NfcA


Brother ラベルプリンター RL-700S

  • NfcV
  • Ndef


ネットカフェの会員証

  • NdefFormattable
  • MifareClassic
  • NfcA


名刺

  • NfcF
  • Ndef

(中にNDEFフォーマットにvCardを書き込んだFeliCa Liteを仕込んでいます)


OCTOPUS

  • NfcF


NFC QUEST Card

  • Ndef
  • NfcF

カスタマー開発部 山下智樹

Androidで指定するタグの種類について

指定するタグの種類について

AndroidでNFC対応アプリを作成する場合、どのタグに反応するかを指定することができます。(ACTION_TAG_DISCOVEREDの場合必要ありません)
指定できるタグの種類は以下があります。

  • IsoDep
  • MifareClassic
  • MifareUltralight
  • Ndef
  • NdefFormattable
  • NfcA
  • NfcB
  • NfcF
  • NfcV

これらのクラスはandroid.nfc.techパッケージに定義されています。
それぞれを説明します。

  • IsoDep
    • ISO-DEP(ISO/IEC 14443-4 DataExchangeProtocol)にアクセスできる
    • NfcAもしくはNfcBである
  • MifareClassic
    • NXP MifareClassic
    • NfcAである
  • MifareUltralight
    • NXP MifareUltralight
    • NfcAである
  • Ndef
    • Ndefにフォーマットされているタグ
  • NdefFormattable
    • Ndefにフォーマットできるタグ
  • NfcA
    • ISO/IEC 14443 TypeA
    • Mifare系がこれに該当する
  • NfcB
    • ISO/IEC 14443 TypeB
    • 日本の公共団体発行のカード等が該当する
  • NfcF
    • FeliCa系がこれに該当する
  • NfcV
    • いわゆる近傍型と呼ばれるタグの種類
    • ISO/IEC 15693
    • ICODE
    • NFCチップによっては対応していない場合があります

具体的にどれなんだろう

どのようなタグが該当するか、私の手持ちのタグをかざしてみます。

Suica

  • NfcF


Taspo

  • NdefFormattable
  • MifareClassic
  • NfcA


運転免許証

  • IsoDep
  • NfcB


Edy

  • NfcF


Clipper Card

  • NdefFormattable
  • IsoDep
  • NfcA


Brother ラベルプリンター RL-700S

  • NfcV
  • Ndef


ネットカフェの会員証

  • NdefFormattable
  • MifareClassic
  • NfcA


名刺

  • NfcF
  • Ndef

(中にNDEFフォーマットにvCardを書き込んだFeliCa Liteを仕込んでいます)


OCTOPUS

  • NfcF


NFC QUEST Card

  • Ndef
  • NfcF

カスタマー開発部 山下智樹

2012年7月19日木曜日

NFCに関するActionの種類


AndroidでNFCに関するActionは以下の3つがあります。

  • ACTION_NDEF_DISCOVERED
  • ACTION_TECH_DISCOVERED
  • ACTION_TAG_DISCOVERED

NFCタグが検出されるといずれかのActionのIntentが発行されます。
どういう場合に発行されるか説明します。

  • ACTION_NDEF_DISCOVERED
    • タグがNDEFでフォーマットされていた場合に、このActionで発行されます。
    • タグの種類によってフィルタリングすることができます。
    • IntentのExtra内にNDEFの情報が含まれます。
    • 最も優先順位が高いです。
  • ACTION_TECH_DISCOVERED
    • 上記のActionで反応するアプリがなかった場合に、このActionで発行されます。
    • タグがNDEFでフォーマットされていなかった場合、一番優先度が高いです。
    • タグの種類によってフィルタリングすることができます。
  • ACTION_TAG_DISCOVERED
    • 上記2種類のActionで対応するアプリがなかった場合に、このActionで発行されます。
    • このActionで指定していればどんなNFC Tagタイプでも反応することができますが、上記2つのActionでアプリが起動した場合、反応することができません。
    • 一番優先度が低いです。

Actionの優先度とは



タグの種類によってスタート地点が異なります。
タグがNDEFにフォーマットされている場合、ACTION_NDEF_DISCOVEREDの判定が行われます。
端末にインストールされているアプリでACTION_NDEF_DISCOVEREDを処理できるアプリが存在した場合
そちらにIntentが渡されます。
ACTION_NDEF_DISCOVEREDを処理できるアプリが存在しなかった場合、もしくはタグがNDEFでフォーマットされていない場合は
ACTION_TECH_DISCOVEREDの判定が行われます。
ACTION_TECH_DISCOVEREDはタグの種類によってフィルタリングすることが可能なIntentです。
(たとえばTypeAにのみ反応するアプリや、TypeFのみに反応するアプリなど)
端末にインストールされているアプリでACTION_TECH_DISCOVEREDを処理できるアプリが存在した場合
そちらにIntentが渡されます。
上記2つのActionを処理できるアプリが存在しなかった場合、ACTION_TAG_DISCOVEREDが発行されます。

Actionを優先順位順に並べると
ACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED、ACTION_TAG_DISCOVEREDとなり
優先順位の高い方から処理可能か判定されます。
途中で処理可能と判定された場合、優先順位の低いActionの判定は行われません。

アプリを作る際に注意しなければならないのは、どのようなタグに反応するアプリなのか決定し
できるだけ優先順位の高いActionで起動できるようにすること
安易にACTION_TAG_DISCOVEREDを指定すると、優先順位の高いアプリにIntentを奪われて起動されない事があります。

カスタマー開発部 山下智樹

NFCに関連するActionについて

NFCに関するActionの種類


AndroidでNFCに関するActionは以下の3つがあります。

  • ACTION_NDEF_DISCOVERED
  • ACTION_TECH_DISCOVERED
  • ACTION_TAG_DISCOVERED

NFCタグが検出されるといずれかのActionのIntentが発行されます。
どういう場合に発行されるか説明します。

  • ACTION_NDEF_DISCOVERED
    • タグがNDEFでフォーマットされていた場合に、このActionで発行されます。
    • タグの種類によってフィルタリングすることができます。
    • IntentのExtra内にNDEFの情報が含まれます。
    • 最も優先順位が高いです。
  • ACTION_TECH_DISCOVERED
    • 上記のActionで反応するアプリがなかった場合に、このActionで発行されます。
    • タグがNDEFでフォーマットされていなかった場合、一番優先度が高いです。
    • タグの種類によってフィルタリングすることができます。
  • ACTION_TAG_DISCOVERED
    • 上記2種類のActionで対応するアプリがなかった場合に、このActionで発行されます。
    • このActionで指定していればどんなNFC Tagタイプでも反応することができますが、上記2つのActionでアプリが起動した場合、反応することができません。
    • 一番優先度が低いです。

Actionの優先度とは



タグの種類によってスタート地点が異なります。
タグがNDEFにフォーマットされている場合、ACTION_NDEF_DISCOVEREDの判定が行われます。
端末にインストールされているアプリでACTION_NDEF_DISCOVEREDを処理できるアプリが存在した場合
そちらにIntentが渡されます。
ACTION_NDEF_DISCOVEREDを処理できるアプリが存在しなかった場合、もしくはタグがNDEFでフォーマットされていない場合は
ACTION_TECH_DISCOVEREDの判定が行われます。
ACTION_TECH_DISCOVEREDはタグの種類によってフィルタリングすることが可能なIntentです。
(たとえばTypeAにのみ反応するアプリや、TypeFのみに反応するアプリなど)
端末にインストールされているアプリでACTION_TECH_DISCOVEREDを処理できるアプリが存在した場合
そちらにIntentが渡されます。
上記2つのActionを処理できるアプリが存在しなかった場合、ACTION_TAG_DISCOVEREDが発行されます。

Actionを優先順位順に並べると
ACTION_NDEF_DISCOVERED、ACTION_TECH_DISCOVERED、ACTION_TAG_DISCOVEREDとなり
優先順位の高い方から処理可能か判定されます。
途中で処理可能と判定された場合、優先順位の低いActionの判定は行われません。

アプリを作る際に注意しなければならないのは、どのようなタグに反応するアプリなのか決定し
できるだけ優先順位の高いActionで起動できるようにすること
安易にACTION_TAG_DISCOVEREDを指定すると、優先順位の高いアプリにIntentを奪われて起動されない事があります。

カスタマー開発部 山下智樹

作るもの

  • NFCタグに反応するアプリを作る
  • 反応したらそのNFC-IDをToastで表示する
  • 反応するのはアプリ起動中のみ

AndroidManifest


1. SDK の変更をする

NFCが使えるAPI Levelは9以降になります。
しかし9はNFCを使うには貧弱なAPIしかないので10以降を指定します。


2. uses-feature を追加する

NFCをもっていない端末にはダウンロードされないように
機能の指定を行います。


3. permission を追加する

NFCを使うためには以下のパーミッションが必要になります。


4. launchMode を変更する

NFCに反応してIntentが発行されるとデフォルトのLaunch Mode(standard)では新しくActivityを作ろうとします。
何度も同じActivityを作られては困るので、launchModeを指定します。


Activity

NFCタグに反応するための準備とNFCタグを受け取る部分を実装します。


1. NFC機能のない端末では起動できないようにする

use-featureで制限していますので、ここで終了するパターンはありません。


2. NFCが無効になっていた時に終了する

NFCが無効になっていた場合、アプリを終了します。
終了するよりも、設定画面に遷移した方が親切です。


3. NFCタグを発見した時に反応するように登録する

設定する項目は2つあります。
3-1. 反応するActionを指定する(詳しくはこちら)
3-2. 反応するタグの種類を指定する(詳しくはこちら)


4. 登録を解除する

アプリがフォアグラウンドにいない時にはNFCに反応しなくていいので
onPauseにて登録を解除します。


5. Intentを受け取る

NFCタグに反応したIntentはonNewIntentを通して受け取ります。
IntentのExtraに格納されたデータを使い、タグとやり取りをします。
以下のコードではNFC-IDを受け取り文字列に整形した後に
Toastで表示しています。


実行イメージ


ソースコード

https://github.com/bs-nfc/NFCHandlerOnApp

カスタマー開発部 山下智樹

AndroidでNFCタグに反応するシンプルなアプリを作る

作るもの

  • NFCタグに反応するアプリを作る
  • 反応したらそのNFC-IDをToastで表示する
  • 反応するのはアプリ起動中のみ

AndroidManifest


1. SDK の変更をする

NFCが使えるAPI Levelは9以降になります。
しかし9はNFCを使うには貧弱なAPIしかないので10以降を指定します。


2. uses-feature を追加する

NFCをもっていない端末にはダウンロードされないように
機能の指定を行います。


3. permission を追加する

NFCを使うためには以下のパーミッションが必要になります。


4. launchMode を変更する

NFCに反応してIntentが発行されるとデフォルトのLaunch Mode(standard)では新しくActivityを作ろうとします。
何度も同じActivityを作られては困るので、launchModeを指定します。


Activity

NFCタグに反応するための準備とNFCタグを受け取る部分を実装します。


1. NFC機能のない端末では起動できないようにする

use-featureで制限していますので、ここで終了するパターンはありません。


2. NFCが無効になっていた時に終了する

NFCが無効になっていた場合、アプリを終了します。
終了するよりも、設定画面に遷移した方が親切です。


3. NFCタグを発見した時に反応するように登録する

設定する項目は2つあります。
3-1. 反応するActionを指定する(詳しくはこちら)
3-2. 反応するタグの種類を指定する(詳しくはこちら)


4. 登録を解除する

アプリがフォアグラウンドにいない時にはNFCに反応しなくていいので
onPauseにて登録を解除します。


5. Intentを受け取る

NFCタグに反応したIntentはonNewIntentを通して受け取ります。
IntentのExtraに格納されたデータを使い、タグとやり取りをします。
以下のコードではNFC-IDを受け取り文字列に整形した後に
Toastで表示しています。


実行イメージ


ソースコード

https://github.com/bs-nfc/NFCHandlerOnApp

カスタマー開発部 山下智樹

2012年6月30日土曜日



エンジニア視点で興味深かったものについてご紹介していきます。

巨大なオブジェクトの数々


f:id:bs-android:20120627125048j:image

巨大な球状のオブジェクトがありました。

手前のコントローラーを動かすと回転したり、音が変わったりしました。

Google I/O 2012の気になったところ



エンジニア視点で興味深かったものについてご紹介していきます。

巨大なオブジェクトの数々


f:id:bs-android:20120627125048j:image

巨大な球状のオブジェクトがありました。

手前のコントローラーを動かすと回転したり、音が変わったりしました。

2012年6月29日金曜日




f:id:bs-android:20120629111955j:image:w640



今月25日~27日まで、東京お台場のホテル日航東京でNFC Forumの総会が開催されていました。


NFC ForumとはNFCの技術仕様とテスト仕様の策定、普及・啓蒙活動を行う世界的な標準化団体です。http://www.nfc-forum.org/home/


AndroidにGoogle I/Oがあるように、NFCにはNFC Forum総会があるんですね。





その中でソリューション・ショーケースという、NFCを使ったサービスやプロダクトを紹介しながら世界中のNFC関係者と交流するカジュアルパーティがあり、今回はその会場を使ってNFC QUESTをやりました。





会場には世界中から集まったSIer、通信事業者、機器メーカー、半導体メーカー、試験機メーカーなどNFC Forumメンバーが180名以上がいました。海外勢が半数以上のため、NFC QUESTもすべて英語に作り替えてやりました。





展示ブースはNFC QUEST以外に12ブースありましたが、ペイメントやヘルス機器に混じって、ゲームをやっているのはブリリアントとソニーさんの2社だけでした。





会場でも異色のブースとあって、入れ替わり立ち代わり見に来ていただくことができました。特に海外の参加者たちはNFCをエンターテイメントに使うという発想に非常に食付いていました。


「ヨーロッパやアメリカではまだNFCが課金しか使われてないのに、日本はこんなサービスがもうあるのか!?NFCが課金以外でも使えるとは!!」


といって海外勢は驚いてました。





国籍は違えど、みんなゲームは大好き。ということで、多くの人がチェックポイントを回って魔王と対戦をしに来てくれました。これで、外国人にもNFC QUESTが十分通用することがわかったのでそろそろ海外のイベントに持ち込んでやってみようかと思います。





f:id:bs-android:20120629132252p:image:w640


f:id:bs-android:20120629133141p:image:w640


f:id:bs-android:20120629133142j:image:w640


f:id:bs-android:20120629133143j:image:w640





文責:カスタマー営業部 藤田健介





NFC Forum総会のソリューション・ショーケースでNFC QUESTを展示しました




f:id:bs-android:20120629111955j:image:w640



今月25日~27日まで、東京お台場のホテル日航東京でNFC Forumの総会が開催されていました。


NFC ForumとはNFCの技術仕様とテスト仕様の策定、普及・啓蒙活動を行う世界的な標準化団体です。http://www.nfc-forum.org/home/


AndroidにGoogle I/Oがあるように、NFCにはNFC Forum総会があるんですね。





その中でソリューション・ショーケースという、NFCを使ったサービスやプロダクトを紹介しながら世界中のNFC関係者と交流するカジュアルパーティがあり、今回はその会場を使ってNFC QUESTをやりました。





会場には世界中から集まったSIer、通信事業者、機器メーカー、半導体メーカー、試験機メーカーなどNFC Forumメンバーが180名以上がいました。海外勢が半数以上のため、NFC QUESTもすべて英語に作り替えてやりました。





展示ブースはNFC QUEST以外に12ブースありましたが、ペイメントやヘルス機器に混じって、ゲームをやっているのはブリリアントとソニーさんの2社だけでした。





会場でも異色のブースとあって、入れ替わり立ち代わり見に来ていただくことができました。特に海外の参加者たちはNFCをエンターテイメントに使うという発想に非常に食付いていました。


「ヨーロッパやアメリカではまだNFCが課金しか使われてないのに、日本はこんなサービスがもうあるのか!?NFCが課金以外でも使えるとは!!」


といって海外勢は驚いてました。





国籍は違えど、みんなゲームは大好き。ということで、多くの人がチェックポイントを回って魔王と対戦をしに来てくれました。これで、外国人にもNFC QUESTが十分通用することがわかったのでそろそろ海外のイベントに持ち込んでやってみようかと思います。





f:id:bs-android:20120629132252p:image:w640


f:id:bs-android:20120629133141p:image:w640


f:id:bs-android:20120629133142j:image:w640


f:id:bs-android:20120629133143j:image:w640





文責:カスタマー営業部 藤田健介







f:id:bs-android:20120628095640j:image:w360





2日目のGoogle IOの基調講演のレビューです。


昨日にも増してにぎわいを見せています。


f:id:bs-android:20120628095215j:image:w200 f:id:bs-android:20120628095352j:image:w200 f:id:bs-android:20120628085607j:image:w200





会場の様子


昨日と同様一番前の席はプレス席専用となっており、一番前からの写真を取る事ができませんでした。


f:id:bs-android:20120628100019j:image:w250 f:id:bs-android:20120628095711j:image:w250







基調講演


カウントダウンからのGoogle IO 2日目開幕です。


f:id:bs-android:20120628100628j:image:w250 f:id:bs-android:20120628100642j:image:w250





昨日同様Vic Gundotra氏から始まりました。


ブルーのGlassを装着して登場です。


f:id:bs-android:20120628100817j:image:w360





Chrome OS


本日はChrome OSから始まります。


f:id:bs-android:20120628100912j:image:w360





Chrome Browser


Nexus Galaxy, Nexus 7, iPhone, iPadでのデモストレーション


f:id:bs-android:20120628101733j:image:w250 f:id:bs-android:20120628101839j:image:w250


f:id:bs-android:20120628102056j:image:w250 f:id:bs-android:20120628102207j:image:w250





Chrome Book


自動で更新する常に最新のコンピュータとのこと。


f:id:bs-android:20120628104103j:image:w360





Google Compute Engine


新サービスの発表!


科学技術系の計算などの処理に特化したクラウドサービスのようなもののようです。


f:id:bs-android:20120628104631j:image:w360





Glass デモストレーション


またもやスカイダイビングでデモストレーションが行われました。


最後の登場はありませんでしたが、着陸時が一番の歓声で盛り上がりました!


f:id:bs-android:20120628111139j:image:w200 f:id:bs-android:20120628111227j:image:w200 f:id:bs-android:20120628111230j:image:w200


f:id:bs-android:20120628111526j:image:w200 f:id:bs-android:20120628111730j:image:w200 f:id:bs-android:20120628111754j:image:w200


f:id:bs-android:20120628111848j:image:w200 f:id:bs-android:20120628111909j:image:w200 f:id:bs-android:20120628111942j:image:w200





おまけ


最後に、ADK2.0のセッションに参加すると


今年もADK一式プレゼントもらいました!


f:id:bs-android:20120628124707j:image:w200 f:id:bs-android:20120628124549j:image:w200 f:id:bs-android:20120628124730j:image:w200





まだまだGoogle IOは続きます。



文責:カスタマー開発部 大阪開発課 藤田 竜史





Google IO 2012 ~2日目レビュー(基調講演)~



f:id:bs-android:20120628095640j:image:w360





2日目のGoogle IOの基調講演のレビューです。


昨日にも増してにぎわいを見せています。


f:id:bs-android:20120628095215j:image:w200 f:id:bs-android:20120628095352j:image:w200 f:id:bs-android:20120628085607j:image:w200





会場の様子


昨日と同様一番前の席はプレス席専用となっており、一番前からの写真を取る事ができませんでした。


f:id:bs-android:20120628100019j:image:w250 f:id:bs-android:20120628095711j:image:w250







基調講演


カウントダウンからのGoogle IO 2日目開幕です。


f:id:bs-android:20120628100628j:image:w250 f:id:bs-android:20120628100642j:image:w250





昨日同様Vic Gundotra氏から始まりました。


ブルーのGlassを装着して登場です。


f:id:bs-android:20120628100817j:image:w360





Chrome OS


本日はChrome OSから始まります。


f:id:bs-android:20120628100912j:image:w360





Chrome Browser


Nexus Galaxy, Nexus 7, iPhone, iPadでのデモストレーション


f:id:bs-android:20120628101733j:image:w250 f:id:bs-android:20120628101839j:image:w250


f:id:bs-android:20120628102056j:image:w250 f:id:bs-android:20120628102207j:image:w250





Chrome Book


自動で更新する常に最新のコンピュータとのこと。


f:id:bs-android:20120628104103j:image:w360





Google Compute Engine


新サービスの発表!


科学技術系の計算などの処理に特化したクラウドサービスのようなもののようです。


f:id:bs-android:20120628104631j:image:w360





Glass デモストレーション


またもやスカイダイビングでデモストレーションが行われました。


最後の登場はありませんでしたが、着陸時が一番の歓声で盛り上がりました!


f:id:bs-android:20120628111139j:image:w200 f:id:bs-android:20120628111227j:image:w200 f:id:bs-android:20120628111230j:image:w200


f:id:bs-android:20120628111526j:image:w200 f:id:bs-android:20120628111730j:image:w200 f:id:bs-android:20120628111754j:image:w200


f:id:bs-android:20120628111848j:image:w200 f:id:bs-android:20120628111909j:image:w200 f:id:bs-android:20120628111942j:image:w200





おまけ


最後に、ADK2.0のセッションに参加すると


今年もADK一式プレゼントもらいました!


f:id:bs-android:20120628124707j:image:w200 f:id:bs-android:20120628124549j:image:w200 f:id:bs-android:20120628124730j:image:w200





まだまだGoogle IOは続きます。



文責:カスタマー開発部 大阪開発課 藤田 竜史





Related Posts Plugin for WordPress, Blogger...