###前提・実現したいこと
Androidアプリで、NFCタグが搭載されている歩行計(万歩計)より
NFC通信を行い、データを取り出したい。
###発生している問題
仕事の都合で初めてAndroidStudioにてアプリを制作しています。
(Javaコード可読は初級レベルで、AndroidStudio使用歴は3週間程度です)
Android端末に搭載されているNFC機能で
NFCタグが搭載されている歩行計より、その日の歩数など
部分的にデータを抜き出し、アプリに表示をしたいと考えています。
書籍(AndroidNFCプログラミング完全ガイド)を読んだり
Webサイト(Nexus7でPASMO(Suica)の履歴を読んでみた/時々、失業SEの開発日誌)を見たり
Felicaユーザーマニュアル抜粋を見てみたりして
IDmの取得やSuicaで履歴を取得するところまでは出来るようになったのですが
歩行計にアクセスするコマンドパケットの組み立て方やレスポンスパケットの受け取り方が
ピンと来ず、詰まってしまっています。
歩行計へのコマンドは0x○○の16進数が16個で1つのコマンドになっています。
PollingでIDmを取得した後、上記のコマンドとは別に他にも
歩行系に情報を送らなければならないのでしょうか。
誠に恥ずかしながら、詳しくお話をお伺いできれば大変ありがたく思います。
知りたいことですが、
Suica/Pasmoなどのカード媒体や、
携帯電話端末や歩行計などの特殊端末では
そもそも送信するコマンドパケットの内容も大きく変わってくるのでしょうか。
以下のソースはWebサイトで公開されていた
Suicaなどのカード系のデータ読み込みに使う際のソースですが
bout.write(0x06); //Felicaコマンド
が歩行計での【0x○○の16進数が16個で1つのコマンド】の部分にあたるのでしょうか。
書籍の図にはNDEFの構成要素図にレコード1(ヘッダー/ペイロード)、レコード2~、と書かれているのですが
WebサイトやFelicaユーザーマニュアルにはブロックデータや、サービスと書かれており混乱しています。
bout.write(1);// サービスコードリストの長さ
こちらは何を指定するところになるのでしょうか。
私がイメージしていた内容としては
データとはRowとColumnで出来ていて
その行、もしくは列、あるいは行列を指定した箇所の値を取得するというものだったのですが
以下に提示しましたソースは行列を指定した箇所の値を取得し
最終的にレスポンスデータを並び替える方法なのでしょうか。
お手数ですが、どんな些細なことでもよいので
ご教示いただければと存じます。
当方teratailも初心者で多々至らない点もあり
ご不快に思う事もあるかと存じますが
どうぞ、よろしくお願いいたします。
###該当のソースコード
private byte[] readWithoutEncryption(byte[] idm, int size)
throws IOException {
ByteArrayOutputStream bout = new ByteArrayOutputStream(100);
bout.write(0); // データ長バイトのダミー bout.write(0x06); // Felicaコマンド「Read Without Encryption」 bout.write(idm); // カードID 8byte bout.write(1); // サービスコードリストの長さ(以下2バイトがこの数分繰り返す) bout.write(0xA0); // 履歴のサービスコード下位バイト bout.write(0x07); // 履歴のサービスコード上位バイト bout.write(size); // ブロック数 for (int i = 0; i < size; i++) { bout.write(0x04); // ブロックエレメント上位バイト 「Felicaユーザマニュアル抜粋」の4.3項参照 bout.write(i); // ブロック番号 } byte[] msg = bout.toByteArray(); msg[0] = (byte) msg.length; // 先頭1バイトはデータ長 return msg; }
回答1件
あなたの回答
tips
プレビュー