2016-04-30 50 views
1

NFCタグのバイナリ情報を読み取るためのアプリを作成しています。ここではNFC意図ハンドラ関数のコードは次のとおりです。Android NfcV get informationコマンドは1バイトしか返しません

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) 
    { 
     ... 
    } 
} 

私はサムスンS3ネオにNFCタグを読んで、この機能を実行すると、すべてが答え変数が期待されるデータで満たされ、正常に動作します:

 
00 04 4B A0 14 01 00 A0 07 E0 F3 07 

Howewer私はHuawei社P8liteに同じNFCタグを読んで、同じ機能を実行する場合、応答変数は1バイトのみで満たされます。エラーの場合は

 
03 

、ISO 1569 3-3標準は、私が何かを受け取るべきであると言います。

 
01 03 

Ie.少なくとも2バイト。ここで2番目のバイトはエラーコードです。だから私が実際に得ている答えは理論的に不可能です。

私は間違っていますか?それはモバイルハードウェアに依存しますか?それをどうやって修正することができますか?

答えて

2

アドレス指定されたコマンドを使用していないため(Address_flagが設定されていないため、要求にUIDフィールドはありません)。オプションのコマンドがタグでサポートされていない場合(エラーコードでさえも)、あなたは何の響きも受け取らないようにしてください。したがって、標準に従って0301 03も受け取らないでください。

AndroidデバイスのNFCチップセットには、ISO/IEC 15693に関する制限があり、完全な標準をサポートしていないことがあります。たとえば、一部のチップセットでは、アドレス指定されていないコマンドに問題があることが知られています。お使いのデバイス上のNFCチップセットは高いデータでで応答VICCsに問題がある可能性がありますので、

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); 

ます。またData_rate_flagのためのさまざまな設定でテストすることがあります:あなたは、コマンドのアドレス指定されたバージョンを使用していることを回避できましたレート。

+0

コマンドのアドレス指定されたバージョンを使用すると、問題が解決しました。どうもありがとうございました! – Carlo

+1

@CarloCe Data_rate_flagの設定を変更しましたか?それは、他のSO読者が両方のオプションがP8liteでサポートされているかどうかを知ることは興味深いかもしれません... –

+2

私はアドレス指定されたコマンドを使用する場合、それはdata_rateの設定と解除の両方を受け入れます – Carlo

関連する問題