NFCタグのバイナリ情報を読み取るためのアプリを書いています。NFCインテントハンドラー関数のコードは次のとおりです。
protected void onNewIntent(@NonNull Intent intent)
{
try
{
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcV = NfcV.get(tag);
byte[] cmdInfo = new byte[]{(byte) 0x02, (byte) 0x2b}; // 'Get info' command
byte[] answer = nfcV.transceive(cmdInfo); // Read info from tag.
...
}
catch(IOException e)
{
...
}
}
Samsung S3 NeoでNFCタグを読み取ってこの関数を実行すると、すべてが正常に機能し、回答変数に期待されるデータが入力されます。
00 04 4B A0 14 01 00 A0 07 E0 F3 07
ただし、Huawei P8liteで同じNFCタグを読み取って同じ関数を実行すると、回答変数は1バイトだけで埋められます。
03
エラーが発生した場合、ISO15693-3標準は次のようなものを受け取る必要があると述べています
01 03
つまり、少なくとも2バイトです。ここで、2番目のバイトはエラーコードです。したがって、私が実際に得ている答えは理論的には不可能です。
私は何が間違っているのですか?モバイルハードウェアに依存しますか?そして、どうすればそれを修正できますか?
アドレス指定されたコマンドを使用していないため(Address_flagが設定されていないため、要求にUIDフィールドがありません)。オプションのコマンドがタグでサポートされていない場合(エラーコードでさえも)、応答をまったく受け取らないはずです。したがって、あなたは受け取っ03
たり01 03
、基準に従わないでください。
AndroidデバイスのNFCチップセットには、ISO / IEC 15693に関して制限があり、完全な標準をサポートしていない場合が多いことに注意してください。たとえば、一部のチップセットには、アドレス指定されていないコマンドに問題があることがわかっています。アドレス指定されたバージョンのコマンドを使用して、これを回避できます。
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
NfcV nfcV = NfcV.get(tag);
byte[] cmdInfo = new byte[]{
(byte)0x20,
(byte)0x2B,
(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00 };
System.arraycopy(tag.getId(), 0, cmdInfo, 2, 8);
byte[] answer = nfcV.transceive(cmdInfo);
デバイスのNFCチップセットでは、高データレートで応答するVICCで問題が発生する可能性があるため、Data_rate_flagのさまざまな設定でテストすることもできます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加