2013-12-21 54 views
0

我閱讀有關Android的API指南的基本NFC標籤的對象視圖NFC標籤的對象。然後我將這個enter link description here項目添加到我的Eclipse環境中,並可以在Samsung Note上運行它。我現在想查看代碼中創建的Tag對象。我已經標記了我已經添加到現有代碼中的代碼。我不確定它是否正確。無論如何,我可以看到代碼中的標記對象裏面有什麼?我嘗試添加一個斷點,並查看了變量中的內容,但沒有看到一個名爲tag的變量。下面是從源代碼:如何在原始格式

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Log.d(TAG, "onCreate"); 

    setContentView(R.layout.main); 

    // initialize NFC 
    nfcAdapter = NfcAdapter.getDefaultAdapter(this); 
    nfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); 

    // Register Android Beam callback 
    nfcAdapter.setNdefPushMessageCallback(this, this); 
    // Register callback to listen for message-sent success 
    nfcAdapter.setOnNdefPushCompleteCallback(this, this); 
    /*********************************** 
    * I added this portion of the code myself to view the tag object 
    ***************************/ 
    Intent intent = new Intent(NfcAdapter.ACTION_TAG_DISCOVERED); 
    intent.putExtra(NfcAdapter.EXTRA_TAG, ""); 
    Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); 
    //************************************************************ 
    if(getIntent().hasExtra(NfcAdapter.EXTRA_TAG)) { 
     TextView textView = (TextView) findViewById(R.id.title); 
     //textView.setText("Hello NFC tag from home screen!"); 
     textView.setTag(tag); 
    }; 

    printTagId(getIntent()); 
} 
+0

你想怎樣通過查看'Tag'object實現? 'Tag'對象只是一個指向NFC服務與正確標籤進行通信的句柄。 –

+0

我想看看NFC標籤的結構。我對NFC API,方法和類的理解有限,現在可以構建不同的標籤。我想手動構建標籤以瞭解NDEF標籤的結構。我的目標是完全瞭解傳感器的感受;即使它是垃圾和毫無意義的,我想看到它。 – Sean

回答

0

Tag對象是指向Android的NFC服務與合適的標籤進行通信的手柄。它不包含關於標籤的許多信息,除了檢測到支持哪些通信技術標籤以及標籤ID(如在通信協議的枚舉或防衝突階段中使用的)。您可以使用getTechList()方法(用於支持的通信技術)和getId()方法(用於標籤的標識符)獲取該信息。

其他是如此,Tag對象本身不包含標籤的結構或內容的任何信息。因此在Tag對象中沒有什麼可以「查看」。實際上,它甚至比以下更復雜:

非接觸式令牌可以是純粹的存儲卡(它提供某些讀取和寫入數據的命令),也可以是處理器智能卡(其中包含的應用程序可以是由智能卡命令接口)。隨着NFC標籤(通過NFC論壇)標準化,有四種不同的標籤類型。它們在通信協議和內存佈局上有所不同。其中一個甚至可以基於處理器智能卡的頂部。除了這些標準化標籤類型之外,還存在幾種NFC兼容標籤類型,這些標籤類型在存儲器佈局和通信協議上也不同。

所以,如果你婉檢索標籤的結構和數據,你就需要實現標籤的特定的通信協議(有時你甚至需要知道確切的內存佈局)。

但是有一個例外到:存在於NFC標籤的抽象層:NDEF(NFC數據交換格式)。目前的NFC設備通常爲至少四種標準化標籤類型實現該抽象層。如果你的標籤是支持的,你可以通過使用Ndef實例的方法爲您Tag對象獲取標籤的NDEF內容(您可以通過瀏覽標籤技術列表或只是想與Ndef.get(tag)獲得一個實例發現這一點)。

Btw。各種Android UI元素的方法與NFC標籤完全無關。因此,將標籤句柄與它們一起存儲沒有多大意義。

+0

嘿,感謝您花時間解釋這一點。我當然會應用它。自從我上一篇文章以來,我也發現了Android上的卡模擬支持。我知道卡片和讀卡器使用相同的標準ISO-14443。我不知道Android也有卡的api,所以我試圖看看我怎麼讀卡。現在我有更多關於這方面的信息。如果您知道我可以下載的任何卡模擬實現,工具或SDK,請告訴我。再次感謝您花時間把這些內容放在一起。節日快樂。 – Sean

+0

我希望我可以就此問一個問題。如果我對可能靠近天線的標籤一無所知,我可以收集哪些信息?我的意思是讓我們說我在我的應用程序中抓取了一個NFC適配器的實例,然後在設備中引入一個標籤。是否有一些事件日誌會告訴我有關天線感應的事情? – Sean

+0

正如我上面寫的,不知道它是什麼標籤,您至少可以收集標籤ID和標籤技術列表。如果它是NFC FOrum標籤(或其他支持的NDEF兼容標籤),則您也可以從標籤收集NDEF消息。沒有自動收集和存儲標籤的日誌,但是當您的活動位於前臺時,您可以使用前臺調度系統通知有關檢測新標籤的信息。 –