4

かなり簡単なことをしたいのですが、Gingerbread APIのメソッドが、スキャンされているトークンのIDであるか、NexusSに搭載されているハードウェアであるかを完全に理解することはできません。デバイスのNFCチップの一意の識別子を取得するので、登録できます(たとえば、デバイスがRFIDリーダーで放棄された場合、放棄されたデバイスをアカウントに関連付けることができます)。これは、現在利用可能なAPIメソッドで可能ですか?

最も有望に見えるコード(ただし、デバイスがないためテストできません)は次のとおりです。

byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
4

4 に答える 4

8

tagId はバイト配列に設定されます。その配列を16進文字列に解析する必要があります。これを行う方法はたくさんありますが、このコードは外部ライブラリに頼らずにそれを行い、何が起こっているかを簡単に確認できます。

String ByteArrayToHexString(byte [] inarray) 
    {
    int i, j, in;
    String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
    String out= "";

    for(j = 0 ; j < inarray.length ; ++j) 
        {
        in = (int) inarray[j] & 0xff;
        i = (in >> 4) & 0x0f;
        out += hex[i];
        i = in & 0x0f;
        out += hex[i];
        }
    return out;
}
于 2011-04-13T20:01:50.263 に答える
2

タグが検出されると、NFC コントローラーによってインテントNfcAdapter.ACTION_TAG_DISCOVEREDが自動的にディスパッチされます。

  1. このようなインテントを処理するには、このアクションのインテント フィルターを追加する必要がありますandroid.nfc.action.TAG_DISCOVERED

    < action android:name="android.nfc.action.TAG_DISCOVERED"/>
    < category android:name="android.intent.category.DEFAULT"/>
    
  2. 適切な権限を追加します。

    < uses-permission android:name="android.permission.NFC" />
    
  3. アプリケーションをサポートされているデバイスのみに制限します。

    < uses-sdk android:minSdkVersion="9" />  
    < uses-feature android:name="android.hardware.nfc" />
    
  4. インテントを処理するときに、提案したコードを呼び出すことができます。

    byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
    NdefMessage[] msgs = (NdefMessage[]) intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
    

詳細については、次を参照してください。

  1. OpenIntents

  2. O'Reilly のオンライン ブック- 第 18 章

于 2011-01-27T12:27:07.973 に答える
2

バージョン 2.3.3 ではクラス Tag があり、目的からそのオブジェクトを取得する場合は、メソッド getId() を使用できます。

Tag myTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

byte[] のタグ ID を「文字列」として必要な場合は、バイトから 16 進数に解析する必要があります;)。

于 2011-03-07T07:03:48.680 に答える