2011-01-27 5 views
3

Gingerbread APIのメソッドがスキャン対象のトークンのIDまたはNexusのハードウェアに対応していれば、かなり簡単に処理できます私ができるようにしたいのは、デバイスのNFCチップの一意の識別子を取得することです。登録することができます(たとえば、デバイスがRFIDリーダーで放棄された場合、放棄されるデバイスをアカウント)。これは現行のAPIメソッドで利用可能ですか?AndroidでNFCハードウェアIDを取得する

最も有望に見える(しかし、私は、デバイスを持っていないので、私はテストすることはできません)コードの一部は、タグの意図NfcAdapter.ACTION_TAG_DISCOVEREDが自動的にNFCコントローラによって送出されます

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

答えて

2

です発見される。

< uses-permission android:name="android.permission.NFC" /> 
  • だけにアプリケーションを制限する:

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

    1. 、そのような意図を処理するには、このアクションandroid.nfc.action.TAG_DISCOVEREDのためにインテントフィルタを追加する必要があります対応デバイス:

      < uses-sdk android:minSdkVersion="9" /> 
      < uses-feature android:name="android.hardware.nfc" /> 
      
    2. あなたが意図を扱うとき、あなたはあなたが示唆したコードを呼び出すことができます。

      1. OpenIntents

      2. O'Reillyの詳細情報をご覧ください:

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

      online book - 第18章

    3. バージョンで
  • +0

    それはデバイスが発見したタグを取得しますが、それはしていないようですオンボードのNFCハードウェアの詳細を取得します。それを行うには? – Matt

    +0

    なぜデバイスのIMEIまたはMEIDを使用しないのですか?彼らは一意とみなされ、あなたはそれらを登録することができます。 – Lior

    +0

    デバイスのNFCトークンがリーダーによってスキャンされているため、情報が転送されない(ただし、デバイスのNFCトークンを取得するより早くAndroidに到着する可能性があります) – Matt

    2

    は、あなたがクラスタグを持っていて、意図フロンそのオブジェクトを取得します場合は、メソッドのgetId()を使用することができます

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

    2.3.3、あなたはバイト[]などから、タグIDが必要な場合"文字列"をバイトから16進数に解析する必要があります。

    +0

    テストするタグはありませんが、お使いのT:\t \t \tバイト[] rawTagId = getIntent() \t \t \t \t \t .getByteArrayExtra(NfcAdapter.EXTRA_ID)。 \t \t \t String tagId = new String(rawTagId); –

    7

    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; 
    } 
    
    +0

    は、私がテストするために何のタグを持っていないが、なぜあなたが使用していない私の一日:) –

    +0

    を保存:\t \t \tバイト[] rawTagId = getIntent() \t \t \t \t \t .getByteArrayExtra(NfcAdapter.EXTRA_ID)。 \t \t \t String tagId = new String(rawTagId); –

    関連する問題