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

2,695 views
2,484 views

Published on

福岡Androidハッカソンにて。http://atnd.org/events/30243

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,695
On SlideShare
0
From Embeds
0
Number of Embeds
28
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. URIやテキストをBEAMするアプリをつくったよ! 2012/7/1 Android Hackathon@Fukuoka @treby006
  2. 2. Android BEAMって? こんなのです。
  3. 3. 実装するには1. マニフェストファイルへNFCのパーミッション を追加する2. NFCチップの制御用インスタンスを取得する3. 送信メッセージ作成用インターフェイスを実装す る4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける5. データを受け取る処理を実装する6. データを受信する先を設定するためのintentfilter を追加する
  4. 4. BEAM=NDEFデータのやり取り NDEF = NFC Data Exchange Format NDEF MessageとNDEF Record ◦ 一つ以上のNDEF Messageに一つ以上の NDEF Record ◦ 単純なものでは一つのNDEF Messageに 一つのNDEF Record
  5. 5. ところでNDEFといえば NFC TagInfoでNFCタグを読んだ時のアレ
  6. 6. てなわけで、実装内容 Well-knownなNDEF MessageをBEAM ◦ とりあえずURIとTEXTだけ実装 ◦ どちらを送るかは選べるように BEAMされた側の端末はNFCタグを読 み込んだ時のような動作をする。 ◦ URI:ブラウザ起動 ◦ TEXT:タグインテント
  7. 7. 先ほどのBEAMの実装方法1. マニフェストファイルへNFCのパーミッション を追加する2. NFCチップの制御用インスタンスを取得する3. 送信メッセージ作成用インターフェイスを実装す る4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける5. データを受け取る処理を実装する6. データを受信する先を設定するためのintentfilter を追加する
  8. 8. 今回の実装範囲1. マニフェストファイルへNFCのパーミッション を追加する2. NFCチップの制御用インスタンスを取得する3. 送信メッセージ作成用インターフェイスを実装す る4. NFCチップの制御用インスタンスと送信用イン ターフェイスを関連付ける5. データを受け取る処理を実装する6. データを受信する先を設定するためのintentfilter を追加する
  9. 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. 10. URIを表すNDEF Record TNF : NdefRecord.TNF_WELL_KNOWN Type:NdefRecord.RTD_URI ペイロードデータ ◦ 実データは2バイト目から ◦ 1バイト目にどんな接頭語を入れるかコー ドで指定する  容量の小さなタグに入れるときなどデータ量削 減が目的
  11. 11. 1バイトコードの例 URI Record Type Definition Technical Specification ◦ NFC Forumのサイトからダウンロードできるよ!
  12. 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;}
  13. 13. TEXTを表すNDEF Record ペイロードに文字コードと言語を指定 する。 言語コード:RFC3066準拠
  14. 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;}
  15. 15. ユーザインタフェース
  16. 16. デモ
  17. 17. 参考文献 http://developer.android.com/intl/ja/gui de/topics/connectivity/nfc/nfc.html#p2p http://techbooster.org/android/device/1 0979/

×