[英]How to get a custom NFC tags in its read?
我正在嘗試為智能手機創建一個將復制NFC標簽的應用程序。 在某些情況下,我面臨着無法為標簽類型添加標簽的問題。
有一種方法:
/**
* Callback when a new tag is discovered by the system.
* <p>
* <p>Communication with the card should take place here.
*
* @param tag Discovered tag
*/
@Override
public void onTagDiscovered(Tag tag) {
... ... ... ... ... ...
MifareClassic mifareClassic = MifareClassic.get(tag);
if (mifareClassic != null) {
mAccountCallback.get().onTagsTypeReceived(
TECH_TYPE_MFR_CLASS, mifareClassic.getType());
mAccountCallback.get().onMifareClassicReceived(mifareClassic);
}
... ... ... ... ... ...
NfcA nfcA = NfcA.get(tag);
if (nfcA != null) {
mAccountCallback.get().onNfcAReceived(nfcA);
}
... ... ... ... ... ...
}
對於包含MifareUltralight MifareClassic技術列表或標簽訪問類型的標簽,可通過以下方法:
.getType()
但是,如果這些技術不可用,則此方法將不可用。 但是,通過使用與PC連接的讀取器b程序Arduino 1.8.5讀取相同的標簽,可以毫無問題地讀取其數據:
如何鍵入任何標簽?
由於您的標簽似乎是MIFARE Ultralight標簽,因此您可以從MifareUltralight
標簽技術對象中獲得類似的類型信息(即getType()
方法):
MifareUltralight mifareUltralight = MifareUltralight.get(tag);
if (mifareUltralight != null) {
... = mifareUltralight.getType();
}
盡管這種類型的信息可能有用,但還是值得懷疑的。 請參見以下問題,以獲得更好的指紋識別不同類型的MIFARE Ultralight / NTAG產品的方法:
但是,還要注意,對任意類型的標簽進行指紋識別當然不是一件容易的事 (另請參閱如何使用Android從NFC標簽中檢測制造商? )。
對於任意NFC標簽任務,仍無法解決。 僅針對NFC類型A找到該解決方案。文檔公司“ NXP Semiconductors” AN10833“ MIFARE類型識別過程”在3.2選擇確認編碼(SAK)編碼中定義了SAK不同類型標簽的相應值。 在此代碼的基礎上出現了:
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
String type = "";
int mSak = (int) (sak & 0x7F);
if (mTagType.getText().toString().equals(getString(R.string.tag_type))) {
switch (mSak) {
case 0x04:
type = getString(R.string.sak_indicates_uid_is_not_complete);
break;
case 0x09:
type = getString(R.string.mifare_classic_protocol_320_bytes);
break;
case 0x08:
type = getString(R.string.mifare_classic_protocol_1kb);
break;
case 0x18:
type = getString(R.string.mifare_classic_protocol_4kb);
break;
case 0x00:
type = getString(R.string.mifare_ultralight_or_ultralight_c);
break;
case 0x10:
case 0x11:
type = getString(R.string.mifare_plus);
break;
case 0x01:
type = getString(R.string.only_mentioned_in_nxp_an_10833_mifare_type_identification_procedure);
break;
case 0x20:
type = getString(R.string.picc_compliant_with_iso_iec_14443_4);
break;
case 0x40:
type = getString(R.string.picc_compliant_with_iso_iec_18092_nfc);
break;
default:
type = getString(R.string.picc_type_unknown);
break;
}
mTagType.setText(type);
}
}
});
獲得值SAK是android.nfc.tech.NfcA類的方法:
.getSak()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.