質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NFC

無線通信

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

5443閲覧

NFCコマンドの送信について

退会済みユーザー

退会済みユーザー

総合スコア0

NFC

無線通信

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/09/19 06:01

編集2017/09/21 02:52

###前提・実現したいこと
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; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2017/09/20 09:43

16進を理解せずに仕事としてアプリ開発をするのですね。。しかも調査スキルもそれほど高くないとなると、ferica関連開発経験のある企業に委託すべきかと思います。例えば、次のリンクを提示したとしても、その先で詰まってしまいますよね https://qiita.com/nshiba/items/38f94d61c020a17314b6
退会済みユーザー

退会済みユーザー

2017/09/20 14:09

すみません、批判も恥も承知の上です。しかし、こちらのサイトではスキルがなければ投稿してはいけないのでしょうか。わからない事が発生したので、質問させていただいてます。スキルを身につけたいのに、企業にしたら?と言う回答は妥当だとは思えません。ましてや、リンクを貼って、見てもわからないでしょうねと言うような回答ですが、では私が質問した事にお答えが出来るのであればお答えいただけますか。スキルが低そうだから、軽くバカにしておこうと言う、その知恵袋的な対応はご勘弁ください。当方は確かにスキルは低いですが、学びたいと言う気持ちは強いです。
t_obara

2017/09/21 00:57

この欄は回答を記入する場所ではありませんし、私のコメントです。そのような反応をする前に、リンクを確認し、試してみて、より具体的な課題を質問されてはいかがでしょうか。
abs123

2017/09/21 07:21

一応これ貼っておきますね。teratail(テラテイル)は、ITエンジニア専用のQ&Aサイトです。作業中発生したバグを投稿すると、すばやく回答を得られます。エンジニア同士で技術問題を解決できる、新しいプラットフォームです。
guest

回答1

0

ベストアンサー

当方が場違いの利用方法をしていたようです。

投稿2017/09/21 08:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abs123

2017/09/21 09:00

なんか止めを刺した感じで後味が悪いので、あまりもう意味もないと思いますが書いておきます。 仕事であれば相談すべきはこのような辺境の地ではなく職場の上司です。以上。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問