MifareClassic连接失败NFC

时间:2015-01-14 18:11:59

标签: android exception nfc

这是我的代码的一部分:

@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,但无法连接。

2 个答案:

答案 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