SlideShare a Scribd company logo
1 of 17
URIやテキストをBEAMする
アプリをつくったよ!
   2012/7/1 Android Hackathon@Fukuoka
                             @treby006
Android BEAMって?
   こんなのです。
実装するには
1.   マニフェストファイルへNFCのパーミッション
     を追加する
2.   NFCチップの制御用インスタンスを取得する
3.   送信メッセージ作成用インターフェイスを実装す
     る
4.   NFCチップの制御用インスタンスと送信用イン
     ターフェイスを関連付ける
5.   データを受け取る処理を実装する
6.   データを受信する先を設定するためのintentfilter
     を追加する
BEAM=NDEFデータのやり取り
 NDEF = NFC Data Exchange Format
 NDEF MessageとNDEF Record
    ◦ 一つ以上のNDEF Messageに一つ以上の
      NDEF Record
    ◦ 単純なものでは一つのNDEF Messageに
      一つのNDEF Record
ところでNDEFといえば
   NFC TagInfoでNFCタグを読んだ時のアレ
てなわけで、実装内容
   Well-knownなNDEF MessageをBEAM
    ◦ とりあえずURIとTEXTだけ実装
    ◦ どちらを送るかは選べるように


   BEAMされた側の端末はNFCタグを読
    み込んだ時のような動作をする。
    ◦ URI:ブラウザ起動
    ◦ TEXT:タグインテント
先ほどのBEAMの実装方法
1.   マニフェストファイルへNFCのパーミッション
     を追加する
2.   NFCチップの制御用インスタンスを取得する
3.   送信メッセージ作成用インターフェイスを実装す
     る
4.   NFCチップの制御用インスタンスと送信用イン
     ターフェイスを関連付ける
5.   データを受け取る処理を実装する
6.   データを受信する先を設定するためのintentfilter
     を追加する
今回の実装範囲
1.   マニフェストファイルへNFCのパーミッション
     を追加する
2.   NFCチップの制御用インスタンスを取得する
3.   送信メッセージ作成用インターフェイスを実装す
     る
4.   NFCチップの制御用インスタンスと送信用イン
     ターフェイスを関連付ける
5.   データを受け取る処理を実装する
6.   データを受信する先を設定するためのintentfilter
     を追加する
ポイント:NDEFデータの生成
   android.nfc.NdefMessage
    ◦ NdefRecordの集合からなる

   android.nfc.NdefRecord
    ◦ NdefRecord(short tnf, byte[] type, byte[] id,
      byte[] payload)
        tnf …… TNF
        type …… Type
        id …… 通常new byte[0]
        payload …… 実際のデータなど
    ◦ TNFとTypeでpayloadの解釈方法が決まる!
URIを表すNDEF Record
 TNF :
  NdefRecord.TNF_WELL_KNOWN
 Type:NdefRecord.RTD_URI
 ペイロードデータ
    ◦ 実データは2バイト目から
    ◦ 1バイト目にどんな接頭語を入れるかコー
      ドで指定する
     容量の小さなタグに入れるときなどデータ量削
      減が目的
1バイトコードの例
   URI Record Type Definition Technical Specification
    ◦ NFC Forumのサイトからダウンロードできるよ!
URIのNDEF Record生成コー
ド
public NdefRecord createUriRecord(byte identifier,
                                   String uri) {
     byte[] uriByte = uri.getBytes();
     byte[] payload = new byte[uriByte.length + 1];
     payload[0] = identifier;
     System.arraycopy(uriByte, 0, payload, 1,
                                  uriByte.length);


     NdefRecord uriRecord = new NdefRecord(
                  NdefRecord.TNF_WELL_KNOWN,
                  NdefRecord.RTD_URI,
                  new byte[0], payload);
     return uriRecord;
}
TEXTを表すNDEF Record
 ペイロードに文字コードと言語を指定
  する。
 言語コード:RFC3066準拠
TEXTのNDEF Record生成コー
ド
public NdefRecord createTextRecord(boolean isUtf8,
                     String language, String text) {
       byte[] textByte = text.getBytes();
       byte[] langByte = language.getBytes();
       byte[] payload = new byte[textByte.length +
                               langByte.length + 1];
       if(!isUtf8) payload[0] = (byte) 0x80;
       payload[0] += langByte.length;


       System.arraycopy(langByte, 0,
                      payload, 1, langByte.length);
       System.arraycopy(textByte, 0,
       payload, 1 + langByte.length, textByte.length);
       !
    NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
                       NdefRecord.RTD_TEXT, new byte[0], payload);
       return textRecord;
}
ユーザインタフェース
デモ
参考文献
 http://developer.android.com/intl/ja/gui
  de/topics/connectivity/nfc/nfc.html#p2p
 http://techbooster.org/android/device/1
  0979/

More Related Content

What's hot

Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateTaisuke Yamada
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability modeYuichiro Naito
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編tzm_freedom
 
V6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoV6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoKohki Ohhira
 
サーバレスモードRTMFP
サーバレスモードRTMFPサーバレスモードRTMFP
サーバレスモードRTMFPitoz itoz
 
IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話YasunobuToyota
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouchYohei Sasaki
 
http2.0 negotiation&header compression
http2.0 negotiation&header compressionhttp2.0 negotiation&header compression
http2.0 negotiation&header compressionyuki-f
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with PoudriereYuichiro Naito
 
Gpsデータをgit hub上に公開する方法
Gpsデータをgit hub上に公開する方法Gpsデータをgit hub上に公開する方法
Gpsデータをgit hub上に公開する方法Kentaro Oba
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側yuki-f
 
Network Forensics Puzzle Contest に挑戦 #2
Network Forensics Puzzle Contest に挑戦 #2Network Forensics Puzzle Contest に挑戦 #2
Network Forensics Puzzle Contest に挑戦 #2彰 村地
 
フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門彰 村地
 

What's hot (17)

Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
Hadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-updateHadoop book-2nd-ch3-update
Hadoop book-2nd-ch3-update
 
Programming under capability mode
Programming under capability modeProgramming under capability mode
Programming under capability mode
 
第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編第三回IoT関連技術勉強会 データ通信編
第三回IoT関連技術勉強会 データ通信編
 
V6prog OSC2013Hokkaido
V6prog OSC2013HokkaidoV6prog OSC2013Hokkaido
V6prog OSC2013Hokkaido
 
M1 gp_OneSwarm
M1 gp_OneSwarmM1 gp_OneSwarm
M1 gp_OneSwarm
 
サーバレスモードRTMFP
サーバレスモードRTMFPサーバレスモードRTMFP
サーバレスモードRTMFP
 
IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話IPv6マルチプレフィックスの話
IPv6マルチプレフィックスの話
 
CouchDB JP & BigCouch
CouchDB JP & BigCouchCouchDB JP & BigCouch
CouchDB JP & BigCouch
 
http2.0 negotiation&header compression
http2.0 negotiation&header compressionhttp2.0 negotiation&header compression
http2.0 negotiation&header compression
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with Poudriere
 
Gpsデータをgit hub上に公開する方法
Gpsデータをgit hub上に公開する方法Gpsデータをgit hub上に公開する方法
Gpsデータをgit hub上に公開する方法
 
hiding
hidinghiding
hiding
 
Multipeer connectivity_エスキュービズム勉強会0523
Multipeer connectivity_エスキュービズム勉強会0523Multipeer connectivity_エスキュービズム勉強会0523
Multipeer connectivity_エスキュービズム勉強会0523
 
Web packaging IETF 側
Web packaging IETF 側Web packaging IETF 側
Web packaging IETF 側
 
Network Forensics Puzzle Contest に挑戦 #2
Network Forensics Puzzle Contest に挑戦 #2Network Forensics Puzzle Contest に挑戦 #2
Network Forensics Puzzle Contest に挑戦 #2
 
フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門フレッシャーズのためのパケット解析入門
フレッシャーズのためのパケット解析入門
 

Similar to URIやTEXTをBEAMするアプリを作ったよ!

Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門Yuichi Ito
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty componentssogabe
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-Tomoki YAMASHITA
 
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたリーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたTakumi Sato
 
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
 
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)Takuya Azumi
 
月刊NDEF 2013年8月号
月刊NDEF 2013年8月号月刊NDEF 2013年8月号
月刊NDEF 2013年8月号Hirokuma Ueno
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~Kouta Imanaka
 
Linux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworksLinux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworkstripodworks
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409稔 小林
 
perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)Daichi Egawa
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようPanda Yamaki
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkTakaaki Hoyo
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersSeiya Mizuno
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2Tomohiro Namba
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Panda Yamaki
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)YoheiOkuyama
 

Similar to URIやTEXTをBEAMするアプリを作ったよ! (20)

Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
 
避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-避けては通れないバイナリ地獄 もっとRTDを-
避けては通れないバイナリ地獄 もっとRTDを-
 
リーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめましたリーダブルコードが良書だったのでまとめました
リーダブルコードが良書だったのでまとめました
 
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 -
 
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
NXT開発環境(ETロボコン向けTOPPERS活用セミナー5)
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
月刊NDEF 2013年8月号
月刊NDEF 2013年8月号月刊NDEF 2013年8月号
月刊NDEF 2013年8月号
 
NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~NFC元年 ~AndroidからみたNFCについて~
NFC元年 ~AndroidからみたNFCについて~
 
Linux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworksLinux Kernel Seminar in tripodworks
Linux Kernel Seminar in tripodworks
 
Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409Wiresharkの解析プラグインを作る ssmjp 201409
Wiresharkの解析プラグインを作る ssmjp 201409
 
perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)perfを使ったpostgre sqlの解析(後編)
perfを使ったpostgre sqlの解析(後編)
 
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみようHokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
Hokkaido.cap#2 一般的なプロトコルのパケットを覗いてみよう
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)perfを使ったPostgreSQLの解析(後編)
perfを使ったPostgreSQLの解析(後編)
 
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol BuffersApache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
 
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!Hokkaido.cap #osc11do Wiresharkを使いこなそう!
Hokkaido.cap #osc11do Wiresharkを使いこなそう!
 
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327)
 

More from treby

失敗から学ぶEM方法論
失敗から学ぶEM方法論失敗から学ぶEM方法論
失敗から学ぶEM方法論treby
 
Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例treby
 
Frontendと向き合う
Frontendと向き合うFrontendと向き合う
Frontendと向き合うtreby
 
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜treby
 
モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!treby
 
Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?treby
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習treby
 
The Art of Collaboration
The Art of CollaborationThe Art of Collaboration
The Art of Collaborationtreby
 
楽しく学ぶ?API
楽しく学ぶ?API楽しく学ぶ?API
楽しく学ぶ?APItreby
 
VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私treby
 
アイマスハッカソン2017
アイマスハッカソン2017アイマスハッカソン2017
アイマスハッカソン2017treby
 
Sinatraで触れる生SQL
Sinatraで触れる生SQLSinatraで触れる生SQL
Sinatraで触れる生SQLtreby
 
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~treby
 
最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介treby
 
たたかうFFI
たたかうFFIたたかうFFI
たたかうFFItreby
 
mastodon API
mastodon APImastodon API
mastodon APItreby
 
TH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbotTH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbottreby
 
Paperclip
PaperclipPaperclip
Papercliptreby
 
このみさんにPRしてもらう
このみさんにPRしてもらうこのみさんにPRしてもらう
このみさんにPRしてもらうtreby
 
reading suture
reading suturereading suture
reading suturetreby
 

More from treby (20)

失敗から学ぶEM方法論
失敗から学ぶEM方法論失敗から学ぶEM方法論
失敗から学ぶEM方法論
 
Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例Vue.js + Vuexチーム開発実践の事例
Vue.js + Vuexチーム開発実践の事例
 
Frontendと向き合う
Frontendと向き合うFrontendと向き合う
Frontendと向き合う
 
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
Railsのフロントエンドのトレンドと実際〜事業を進めながら、レールに乗り続けるためのテクニック〜
 
モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!モダンJSでモダンなWebアプリケーションを作ろう!
モダンJSでモダンなWebアプリケーションを作ろう!
 
Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?Octocatは技術的負債の夢を見るか?
Octocatは技術的負債の夢を見るか?
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習
 
The Art of Collaboration
The Art of CollaborationThe Art of Collaboration
The Art of Collaboration
 
楽しく学ぶ?API
楽しく学ぶ?API楽しく学ぶ?API
楽しく学ぶ?API
 
VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私VueとdockerとAWSとチームとアイマスと私
VueとdockerとAWSとチームとアイマスと私
 
アイマスハッカソン2017
アイマスハッカソン2017アイマスハッカソン2017
アイマスハッカソン2017
 
Sinatraで触れる生SQL
Sinatraで触れる生SQLSinatraで触れる生SQL
Sinatraで触れる生SQL
 
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
Railsフロントエンドの modernizeにおける一事例 ~decaffeinateからES2015移行まで~
 
最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介最近のRailsフロントエンド開発の紹介
最近のRailsフロントエンド開発の紹介
 
たたかうFFI
たたかうFFIたたかうFFI
たたかうFFI
 
mastodon API
mastodon APImastodon API
mastodon API
 
TH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbotTH@NK YOU for SMILE!!とミリオンボーダーbot
TH@NK YOU for SMILE!!とミリオンボーダーbot
 
Paperclip
PaperclipPaperclip
Paperclip
 
このみさんにPRしてもらう
このみさんにPRしてもらうこのみさんにPRしてもらう
このみさんにPRしてもらう
 
reading suture
reading suturereading suture
reading suture
 

URIやTEXTをBEAMするアプリを作ったよ!

  • 1. URIやテキストをBEAMする アプリをつくったよ! 2012/7/1 Android Hackathon@Fukuoka @treby006
  • 2. Android BEAMって?  こんなのです。
  • 3. 実装するには 1. マニフェストファイルへNFCのパーミッション を追加する 2. NFCチップの制御用インスタンスを取得する 3. 送信メッセージ作成用インターフェイスを実装す る 4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける 5. データを受け取る処理を実装する 6. データを受信する先を設定するためのintentfilter を追加する
  • 4. BEAM=NDEFデータのやり取り  NDEF = NFC Data Exchange Format  NDEF MessageとNDEF Record ◦ 一つ以上のNDEF Messageに一つ以上の NDEF Record ◦ 単純なものでは一つのNDEF Messageに 一つのNDEF Record
  • 5. ところでNDEFといえば  NFC TagInfoでNFCタグを読んだ時のアレ
  • 6. てなわけで、実装内容  Well-knownなNDEF MessageをBEAM ◦ とりあえずURIとTEXTだけ実装 ◦ どちらを送るかは選べるように  BEAMされた側の端末はNFCタグを読 み込んだ時のような動作をする。 ◦ URI:ブラウザ起動 ◦ TEXT:タグインテント
  • 7. 先ほどのBEAMの実装方法 1. マニフェストファイルへNFCのパーミッション を追加する 2. NFCチップの制御用インスタンスを取得する 3. 送信メッセージ作成用インターフェイスを実装す る 4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける 5. データを受け取る処理を実装する 6. データを受信する先を設定するためのintentfilter を追加する
  • 8. 今回の実装範囲 1. マニフェストファイルへNFCのパーミッション を追加する 2. NFCチップの制御用インスタンスを取得する 3. 送信メッセージ作成用インターフェイスを実装す る 4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける 5. データを受け取る処理を実装する 6. データを受信する先を設定するためのintentfilter を追加する
  • 9. ポイント:NDEFデータの生成  android.nfc.NdefMessage ◦ NdefRecordの集合からなる  android.nfc.NdefRecord ◦ NdefRecord(short tnf, byte[] type, byte[] id, byte[] payload)  tnf …… TNF  type …… Type  id …… 通常new byte[0]  payload …… 実際のデータなど ◦ TNFとTypeでpayloadの解釈方法が決まる!
  • 10. URIを表すNDEF Record  TNF : NdefRecord.TNF_WELL_KNOWN  Type:NdefRecord.RTD_URI  ペイロードデータ ◦ 実データは2バイト目から ◦ 1バイト目にどんな接頭語を入れるかコー ドで指定する  容量の小さなタグに入れるときなどデータ量削 減が目的
  • 11. 1バイトコードの例  URI Record Type Definition Technical Specification ◦ NFC Forumのサイトからダウンロードできるよ!
  • 12. URIのNDEF Record生成コー ド public NdefRecord createUriRecord(byte identifier, String uri) { byte[] uriByte = uri.getBytes(); byte[] payload = new byte[uriByte.length + 1]; payload[0] = identifier; System.arraycopy(uriByte, 0, payload, 1, uriByte.length); NdefRecord uriRecord = new NdefRecord( NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload); return uriRecord; }
  • 14. TEXTのNDEF Record生成コー ド public NdefRecord createTextRecord(boolean isUtf8, String language, String text) { byte[] textByte = text.getBytes(); byte[] langByte = language.getBytes(); byte[] payload = new byte[textByte.length + langByte.length + 1]; if(!isUtf8) payload[0] = (byte) 0x80; payload[0] += langByte.length; System.arraycopy(langByte, 0, payload, 1, langByte.length); System.arraycopy(textByte, 0, payload, 1 + langByte.length, textByte.length); ! NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], payload); return textRecord; }
  • 17. 参考文献  http://developer.android.com/intl/ja/gui de/topics/connectivity/nfc/nfc.html#p2p  http://techbooster.org/android/device/1 0979/