2014-05-03 40 views
4

據我所知,當Android手機觸碰到NFC標籤時,它會發送一個事件(NDEF_DISCOVERED意圖),但Android似乎並不關心這個標籤是否保留在原位。我的解決方案是鎖定屏幕,然後解鎖它。如果標籤仍然存在,我可以再讀一遍。這顯然是一個愚蠢的方式。有沒有更聰明的方法來做到這一點?如何找出NFC標籤是否仍在Android的範圍內?

回答

3

由您的活動收到的NFC意圖的一部分,您也將獲得意圖額外標籤手柄(Tag對象):

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

根據標籤的類型,你就可以得到特定標籤技術的一個實例。舉例來說,如果它是一個NDEF標籤,你可以得到:

ndefTag.connect(); 

之後,你可以檢查標籤:

Ndef ndefTag = Ndef.get(tag); 

然後你可以使用connect()方法連接到標籤還是通過定期嘗試從標籤讀取「連接」到設備:

try { 
    ndefTag.getNdefMessage(); 
} catch (IOException e) { 
    // if you receive an IOException, contact to the tag has been lost 
} 

注意,如果您的活動是在前臺所有的時間和屏幕保持這個只會工作。

+0

還沒有嘗試過,但文檔指定了一個'TagLostException'。如果標籤超出範圍,後者是否會觸發?前者是否處理任何其他類型的I/O問題? – user149408

+0

@ user149408'TagLostException * *是*特定類型的IO異常。所以,是的,在大多數設備上,'IOException e'將是'TagLostException'的一個實例。 –

1

有一項功能可以檢查卡是否仍然連接,稱爲isConnected()。可以這樣使用:

try { 
    ndef.connect(); 
    while(ndef.isConnected()){ 

    //Your code here 

    } 
} catch (IOException e) { 
    //Error 
} 
相關問題