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/

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 NdefRecordcreateUriRecord(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.
  • 14.
    TEXTのNDEF Record生成コー ド public NdefRecordcreateTextRecord(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.
  • 16.
  • 17.
    参考文献  http://developer.android.com/intl/ja/gui de/topics/connectivity/nfc/nfc.html#p2p  http://techbooster.org/android/device/1 0979/