这是我的代码的一部分:
@Override
protected void onResume() {
super.onResume();
adaptadorNFC = NfcAdapter.getDefaultAdapter(this);
final Intent intent = new Intent(this.getApplicationContext(), this.getClass());
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
final PendingIntent pendingIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent, 0);
adaptadorNFC.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
read(this.getIntent());
}
@Override
protected void onPause() {
adaptadorNFC.disableForegroundDispatch(this);
super.onPause();
}
private void read(Intent intent)
{
Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
MifareClassic mifare = MifareClassic.get(tagFromIntent);
try {
mifare.connect();
System.out.println("success connection");
} catch (IOException e) {
System.out.println("Error");
} finally {
if (mifare != null) {
try {
mifare.close();
}
catch (IOException e) {
System.out.println("Error");
}
}
}
}
但是当我到达mifare.connect()时,它会落入IOException。异常消息为null,因此我没有更多信息。我非常感谢你的帮助。 其他一切都很好。只有当我要连接时才会失败。我正在使用的标签是eifctivelly Mifare Classic 1K。我能够读取它的ID,但无法连接。
答案 0 :(得分:2)
代码没问题。我的cel读取mifare经典。问题是我发送了许多Toasts(直到它完成显示消息才停止线程),当我通过mifare时,我在它到达connect方法之前将它从单元格中取出。感谢@ThomasRS代码检测设备是否支持Mifare Classic
答案 1 :(得分:0)
并非所有Android设备都支持Mifare Classic卡 - 这不是一个完全标准的卡,因此一些芯片制造商不支持它。
在您的活动中,请使用
进行检查 private boolean hasMifareClassic() {
return getPackageManager().hasSystemFeature("com.nxp.mifare");
}
有关完整示例,请参阅此abstract activity。