嗨,我正在尝试从NFC标签中读取。但我得到了一个例外。
我已经把这个条件检测到标签了吗?
if(NfcAdapter.ACTION_TAG_DISCOVERED != null)这个条件是否正确?
发布于 2012-09-07 15:30:39
回答你关于代码的问题-
这总是正确的-- NfcAdapter.ACTION_TAG_DISCOVERED是一个常量值--你需要使用:
getIntent().getAction().equals(NfcAdapter.ACTION_TAG_DISCOVERED) 来比较一下。
但是,这可能与你的例外无关-
发布于 2015-02-17 23:48:31
首先,您必须初始化NFC适配器,并在onCreate回调中定义挂起的意图:
NfcAdapter mAdapter;
PendingIntent mPendingIntent;
mAdapter = NfcAdapter.getDefaultAdapter(this);
if (mAdapter == null) {
//nfc not support your device.
return;
}
mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this,
getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);在onResume()回调中,启用前台调度以检测NFC意图。
mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null);在onPause()回调中,您必须禁用forground调度:
if (mAdapter != null) {
mAdapter.disableForegroundDispatch(this);
}在onNewIntent()回调方法中,您将获得新的Nfc意图。在获得意图之后,您必须解析意图以检测卡:
@Override
protected void onNewIntent(Intent intent) {
getTagInfo(intent)
}
private void getTagInfo(Intent intent) {
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
String[] techList = tag.getTechList();
for (int i = 0; i<techList.length; i++) {
if (techList[i].equals(MifareClassic.class.getName())) {
MifareClassic mifareClassicTag = MifareClassic.get(tag);
switch (mifareClassicTag.getType()) {
case MifareClassic.TYPE_CLASSIC:
//Type Clssic
break;
case MifareClassic.TYPE_PLUS:
//Type Plus
break;
case MifareClassic.TYPE_PRO:
//Type Pro
break;
}
} else if (techList[i].equals(MifareUltralight.class.getName())) {
//For Mifare Ultralight
MifareUltralight mifareUlTag = MifareUltralight.get(tag);
switch (mifareUlTag.getType()) {
case MifareUltralight.TYPE_ULTRALIGHT:
break;
case MifareUltralight.TYPE_ULTRALIGHT_C:
break;
}
} else if (techList[i].equals(IsoDep.class.getName())) {
// info[1] = "IsoDep";
IsoDep isoDepTag = IsoDep.get(tag);
} else if (techList[i].equals(Ndef.class.getName())) {
Ndef.get(tag);
} else if (techList[i].equals(NdefFormatable.class.getName())) {
NdefFormatable ndefFormatableTag = NdefFormatable.get(tag);
}
}
}完整的代码是here。
发布于 2012-09-18 06:54:40
这句话永远是正确的。
我已经创建了一个project,它有一个样板项目,用于在正确的轨道上运行。
https://stackoverflow.com/questions/12313596
复制相似问题