我制作了一个读取NFC标签的应用程序,但我面临的问题是并非所有乐队都有ID。
是否可以为空标记分配新ID?
$ which curl
/usr/bin/curl
的Manifest.xml
private String tagInfoId = "";
private NfcAdapter nfcAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_player);
if (!userPrefs.isLoggedIn().get()) finish();
trackerService = ServiceGateway.createAuthorizedService(TrackerService.class);
nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null) {
Toast.makeText(this,
"NFC NOT supported on this devices!",
Toast.LENGTH_LONG).show();
finish();
} else if (!nfcAdapter.isEnabled()) {
Toast.makeText(this,
"NFC NOT Enabled!",
Toast.LENGTH_LONG).show();
finish();
}
}
@Override
protected void onResume() {
super.onResume();
Intent intent = getIntent();
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
if (tag == null) {
Log.d(TAG, "tag == null");
//here is possible to write a new tag code ???
} else {
byte[] tagId = tag.getId();
for (int i = 0; i < tagId.length; i++) {
tagInfoId += Integer.toHexString(tagId[i] & 0xFF);
}
Log.d(TAG, "onResume() called with: " + "tagID:" + tagInfoId);
}
}
}
另外,如果我为新标签分配ID,它会以相同的方式读取它还是我必须更改上面的代码?
答案 0 :(得分:0)
对于NFC意图,意图额外TAG永远不应为空(或null
)。因此,您应始终从Tag
获取intent.getParcelableExtra(NfcAdapter.EXTRA_TAG)
对象,并且您永远不应该分支到if (tag == null) {
。
如果您仍然到达tag == null
分支,那么这与没有标识符的标记无关。这意味着您的设备的NFC堆栈中出现了严重错误。例如,这可能是标签读取在很早的阶段被中断,或者标签没有正确地说出读者期望的协议。由于您没有收到Tag
个对象,因此也无法与标记进行通信。
因此,你无能为力。您只能尝试重新读取标签(通过手机重新标记)。